java程序使用JDBC接口连接数据库
2016-05-22 22:12
686 查看
本文主要总结了这两天学习的关于Java使用JDBC连接数据库的实现方法。使用JDBC连接数据库一般步骤有:
1、加载驱动程序
Class.forName(“com.mysql.jdbc.Driver”);
2、创建连接对象
Connection conn = DriverManager.getConnection(String url,String user, String password);
3、创建执行sql语句的对象
4、对结果集进行处理
5、关闭资源
2、加载Mysql驱动
Class.forName(“com.mysql.jdbc.Driver”);注意在加载驱动前需要引进jar包。
2、ManagerDriver跟踪可用的驱动程序,并且建立驱动程序与数据库之间的连接。
3、具体实现连接方法
Connection conn = DriverManager.getConnection(String url,String user, String password);
其中url = “jdbc:mysql://localhost/xxxx”,localhost代表本机,当然也可以使用回送IP地址127.0.0.1,xxxx代表自己创建的数据库;
4、建立连接比较耗时,实际中一般采用连接池来管理连接,从而提高效率。
控制台输出结果:
创建连接耗时:231ms
com.mysql.jdbc.JDBC4Connection@2dda6444
Statement stmt = conn.createStatement();
2、继承Statement接口,由prepareStatement(sql)创建。比Statement效率更高,并且可以防止sql注入。一般使用这个。
测试代码:
执行后:
3、程序说明:
1、 String sql = “insert into dogs values(?,?,?)”;其中?表示占位符。
2、给相应的占位符指定值
stmt.setInt(1,1);
stmt.setString(2, “Tom”);
stmt.setDate(3, new Date(System.currentTimeMillis()));
经常如下使用:
查询数据库的代码:
控制台输出结果:
1–Tom–2016-05-22
2–Jomi–2016-05-22
1、加载驱动程序
Class.forName(“com.mysql.jdbc.Driver”);
2、创建连接对象
Connection conn = DriverManager.getConnection(String url,String user, String password);
3、创建执行sql语句的对象
4、对结果集进行处理
5、关闭资源
一、加载连接数据库的驱动到JVM(Driver接口)
1、使用JDBC接口连接数据库的第一步:加载连接数据库的驱动即Driver到JVM. Driver接口是由数据库厂家提供的,对于我们java开发者而言,只需要使用Driver接口就可以了.SUN公司只提供JDBC接口,具体实现交由各个数据库厂商实现具体的连接类。2、加载Mysql驱动
Class.forName(“com.mysql.jdbc.Driver”);注意在加载驱动前需要引进jar包。
二、使用ManagerDriver接口创建连接对象
1、这个接口用于管理驱动,是JDBC的管理层。2、ManagerDriver跟踪可用的驱动程序,并且建立驱动程序与数据库之间的连接。
3、具体实现连接方法
Connection conn = DriverManager.getConnection(String url,String user, String password);
其中url = “jdbc:mysql://localhost/xxxx”,localhost代表本机,当然也可以使用回送IP地址127.0.0.1,xxxx代表自己创建的数据库;
4、建立连接比较耗时,实际中一般采用连接池来管理连接,从而提高效率。
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; /** * 测试加载连接数据库的驱动到JVM,然后建立连接 * @author Liubangxin * */ public class DBDemo03 { public static void main(String[] args) { Connection conn = null; try { //1、加载驱动到JVM Class.forName("com.mysql.jdbc.Driver"); long d1= System.currentTimeMillis(); //2、建立连接,其实连接内部包含了socket对象,是一个远程连接对象,比较耗时 //真正的开发中,为了提高效率,通常会使用连接池来管理连接 conn = DriverManager.getConnection("jdbc:mysql://localhost/lbx","root","19930701"); long d2 = System.currentTimeMillis(); System.out.println("创建连接耗时:"+(d2-d1)+"ms"); System.out.println(conn); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); }finally{ try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } }
控制台输出结果:
创建连接耗时:231ms
com.mysql.jdbc.JDBC4Connection@2dda6444
三、创建执行sql语句的对象
Statement接口:用于执行静态 SQL 语句并返回它所生成结果的对象。1、三种Statement类
①、statement:
由createStatement创建,用于执行简单的sql语句,不带参数。一般很少。Statement stmt = conn.createStatement();
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; /** * 测试Statement :The object used for executing a static SQL statement * and returning the results it produces. * @author Liubangxin * */ public class DBDemo04 { public static void main(String[] args) { Connection conn = null; Statement stmt = null; try { //1、加载驱动到JVM Class.forName("com.mysql.jdbc.Driver"); //2、建立连接,其实连接内部包含了socket对象,是一个远程连接对象,比较耗时 //真正的开发中,为了提高效率,通常会使用连接池来管理连接 conn = DriverManager.getConnection("jdbc:mysql://localhost/lbx","root","19930701"); //3、执行sql语句,实际中很少用statement因为可能会有sql注入现象 stmt = conn.createStatement(); // String name = "zhang"; // String sql = "insert into persons values (7,'Li','"+name+"','Ding Street','Nanjing',52)"; // stmt.execute(sql); //测试sql注入 String name = "1 or 1=1"; //一直未true,所以数据全没了 String sql = "delete from dogs where id="+name; stmt.execute(sql); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); }finally{ try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); } try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } }
②、PreparedStatement:
1、表示预编译的 SQL 语句的对象。SQL 语句被预编译并存储在 PreparedStatement对象中。然后可以使用此对象多次高效地执行该语句。2、继承Statement接口,由prepareStatement(sql)创建。比Statement效率更高,并且可以防止sql注入。一般使用这个。
测试代码:
import java.sql.Connection; import java.sql.Date; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; /** * 测试PreparedStatement的使用:SQL 语句被预编译并存储在 PreparedStatement * 对象中。然后可以使用此对象多次高效地执行该语句。 * @author Liubangxin * */ public class DBDemo05 { public static void main(String[] args) { Connection conn = null; PreparedStatement stmt = null; try { Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection("jdbc:mysql://localhost/lbx","root","19930701"); String sql = "insert into dogs values(?,?,?)"; //?占位符 stmt = conn.prepareStatement(sql); // stmt.setInt(1,1); // stmt.setString(2, "Tom"); // stmt.setDate(3, new Date(System.currentTimeMillis())); //或者为了方便可以用如下写法 stmt.setObject(1, 2); stmt.setObject(2, "Jomi"); stmt.setObject(3, new Date(System.currentTimeMillis())); stmt.execute(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); }finally{ try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); } try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } }
执行后:
3、程序说明:
1、 String sql = “insert into dogs values(?,?,?)”;其中?表示占位符。
2、给相应的占位符指定值
stmt.setInt(1,1);
stmt.setString(2, “Tom”);
stmt.setDate(3, new Date(System.currentTimeMillis()));
③、CallableStatement:
继承PreparedStatement接口。由方法prePareCall创建,用于调用存储过程。2、常用的Statement方法
①、execute()
运行一般sql语句,返回类型为boolean。如果返回一个结果集(ResultSet)则为true,比如执行查询数据库语句,如果没结果或者只是更新数据库则为false,比如执行update语句。②、executeQuery()
运行select语句,返回一个结果集(ResultSet)③、executeUpdate()
执行update,delete,insert语句。返回操作的行数。四、获取与处理结果集
ResultSet接口:statement执行executeQuery()方法返回一个结果集。经常如下使用:
ResultSet rst = stmt.executeQuery(); while(rst.next()){ System.out.println(rst.getInt(1)+"--"+rst.getString(2)+"--"+rst.getDate(3)); }
五、关闭接口
操作完成以后要把所有使用的JDBC对象全都关闭,以释放JDBC资源。关闭接口遵循如下规则: 关闭顺序和声明顺序相反:即关闭顺序:rst—>stmt—>conn。并且三个捕获异常要分开写。查询数据库的代码:
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; /** * 测试ResultSet: A table of data representing a database result set, which * is usually generated by executing a statement that queries the database. * @author Liubangxin * */ public class DBDemo06 { public static void main(String[] args) { Connection conn = null; PreparedStatement stmt = null; ResultSet rst = null; try { Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection("jdbc:mysql://localhost/lbx","root","19930701"); String sql = "select * from dogs where id>=?"; //?占位符 stmt = conn.prepareStatement(sql); stmt.setObject(1, 1); rst = stmt.executeQuery(); while(rst.next()){ System.out.println(rst.getInt(1)+"--"+rst.getString(2)+"--"+rst.getDate(3)); } } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); }finally{ //后打开的先关闭 而且将三个分开写 try { rst.close(); } catch (SQLException e) { e.printStackTrace(); } try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); } try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } }
控制台输出结果:
1–Tom–2016-05-22
2–Jomi–2016-05-22
相关文章推荐
- Struts 2 的stream result用法
- 市长信箱邮件查询服务: 使用SpringBoot搭建基础
- spring mvc 关于乱码的几种解决方式
- java基础第五天
- Java基础知识总结(绝对经典)
- 利用for循环打印实心棱形和空心棱形
- spring <context:component-scan />及<mvc:annotation-driven />使用说明
- java中静态代码块
- Java的BoxLayout的水平支撑组件和垂直支撑组件
- Java大牛养成记(8)——何为servlet?
- Java.Swing.button绑定快捷键的3种办法
- Java 多线程总结(一)
- springMVC(12)------表单标签的使用
- 在eclipse上配置maven
- java设计对象处理
- 归并排序——java
- struts2中拦截器的简介与配置使用
- 实例方法和类方法的区别
- Java项目:学生成绩管理系统(二)
- 关于Maven+SpringMvc4.2版本返回json配置