一、代码结构
二、JDBCFactory.java
package com.test; import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties; public class JDBCFactory { //定义静态属性 private static String DRIVER; private static String URL; private static String USERNAME; private static String PASSWORD; //静态代码块,用来加载资源文件中的信息,且只会加载一次 static{ //1、加载数据配置文件(资源对象) Properties pro=new Properties(); //2、将资源读取成字节输入流 InputStream is=JDBCFactory.class.getResourceAsStream("jdbc.sqlserver.properties"); try { //3、通过资源对象加载字节输入流 pro.load(is); //4、资源对象通过key来获取对应的文件中的value DRIVER=pro.getProperty("jdbc.driver"); URL=pro.getProperty("jdbc.url"); USERNAME=pro.getProperty("jdbc.username"); PASSWORD=pro.getProperty("jdbc.password"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /**建立数据库连接的静态方法 * @return 如果有异常,则会返回null */ public static Connection getConn(){ Connection ct=null; try { //1、加载驱动 Class.forName(DRIVER); //2、得到连接 ct=DriverManager.getConnection(URL,USERNAME,PASSWORD); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return ct; } /** * 静态方法,用来关闭资源,注意关闭顺序,否则可能报错 */ public static void closeAll(Connection ct,Statement st,ResultSet rs){ if(rs!=null){ try { rs.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(st!=null){ try { st.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(ct!=null){ try { ct.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
三、jdbc.sqlserver.properties
jdbc.driver=com.microsoft.jdbc.sqlserver.SQLServerDriver jdbc.url=jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName=spdb1 jdbc.username=sa jdbc.password=m123
四、TestClass.java
package com.test; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Timestamp; public class TestClass { Connection ct; PreparedStatement ps=null; ResultSet rs; public static void main(String[] args) { TestClass tc=new TestClass(); tc.ct=JDBCFactory.getConn(); String sql="insert into student_table(stuname,stuage,stusex,stubirth,stusubj) values(?,?,?,?,?)"; try { tc.ps=tc.ct.prepareStatement(sql); tc.ps.setString(1, "哈哈"); tc.ps.setInt(2, 20); tc.ps.setString(3, "男"); tc.ps.setTimestamp(4, null); tc.ps.setString(5, "呵呵"); tc.ps.executeUpdate(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ JDBCFactory.closeAll(tc.ct, tc.ps, null); } } }
五、说明
jbdc的常用API:
1.Connection:数据库的链接对象
2.statement:数据库sql执行对象
3.preparedStatment:sql的预编译处理对象,是statement子接口
4.resultset:返回查询的结果集
jdbc开发步骤:
1.在项目中加入驱动jar包
2.写jdbc链接代码
preparedStatment 预编译sql命令接口:
1.会对sql语句进行编译检查,可以用参数占位符的方式编写sql语句
2.作用:比普通statement接口执行效率更高。可以防止sql注入的侵入