JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的JavaAPI,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。以下整理了JDBC连接MySQL数据库的常用步骤。
环境:Windows 7
工具:
MyEclipse 2017
mysql-connector-java-5.1.6.jar
一. JDBC编程步骤
1.导包
在工程目录中创建lib文件夹,将下载好的JDBC放到该文件夹中,右键点击选择Bulid path,然后选择 Add to build path
2.加载(注册)驱动
Class.forName(“com.mysql.jdbc.Driver”);
3.获取数据库连接
String url=”jdbc:mysql://hostname:3306/databasename”
Connection con = DriverManager.getConnection(url,user,password)
4.通过Connection对象创建Statement对象
- CreateStatement():创建基本的statement对象
- PrepareStatement(String sql):根据传入的sql语句创建预编译的Statement对象
- prepareCall(String sql):根据传入的sql语句创建CallableStatement对象
推荐使用PreparedStatement创建
PreparedStatement ps = con.PrepareStatement(String sql);
5.使用Statement执行SQL语句
- execute():可以执行任何SQL语句,但比较麻烦
- executeUpdate():主要用于执行DML和DDL语句。执行DML语句返回受影响的行数,执行DDL语句返回0
- executeQuery():只能执行查询语句,执行后返回代表查询结果的ResultSet对象
ps.executeUpdate();
ps.executeQuery();
6.操作结果集
- next()、previous()、first()、last()等移动记录指针的办法
- getXxx()方法获取记录指针指向行、特定列的值
7.回收数据库资源
关闭ResultSet、Statement和Connection等资源
二. 连接数据库并读取数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| package com.lousen.test_10; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class SqlTest { public static void main(String[] args){ try { //1.加载MySQL驱动 Class.forName("com.mysql.jdbc.Driver"); //2.获取数据库连接 Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?useSSL=false","lousen", "1135497143"); if(!con.isClosed()){ System.out.println("成功连接到MySQL数据库!"); } //3.创建statement类对象,用于执行SQL语句 Statement state = con.createStatement(); String sql = "select * from employee"; //要执行的sql语句 //4.ResultSet类,用来存放获取的结果集 ResultSet rs = state.executeQuery(sql); while(rs.next()){ String name = rs.getString("name"); //获取name这列数值 System.out.println(name); } rs.close(); con.close(); } catch (ClassNotFoundException e) { //数据库驱动异常处理 e.printStackTrace(); } catch (SQLException e) { // 数据库连接异常处理 e.printStackTrace(); } } }
|
三. DML语句操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| package com.lousen.test_10; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.sql.SQLException; public class SqlTest_3 { public static void main(String[] args) throws ParseException{ try { Class.forName("com.mysql.jdbc.Driver"); String url = "jdbc:mysql://localhost:3306/test?useSSL=false"; String user = "lousen"; String pwd = "1135497143"; Connection con = DriverManager.getConnection(url,user,pwd); String sql = "insert into employee values(?,?,?,?,?,?)"; //增 //String sql = "update employee set name = ? ,posit_id=? where id = 9"; //改 //String sql = "delete from employee where id > ?"; //删 //预处理添加数据 PreparedStatement ps = con.prepareStatement(sql); ps.setInt(1, 9); //设置参数1,即id=9 ps.setString(2,"蒂花之秀"); ps.setString(3,"男"); DateFormat dateFormat2 = new SimpleDateFormat("yyyy-MM-dd"); Date myDate2 = dateFormat2.parse("1993-09-13"); ps.setDate(4,new java.sql.Date(myDate2.getTime())); ps.setInt(5,24); ps.setInt(6, 8); ps.executeUpdate(); //执行更新 } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
|
四. DDL语句操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| package com.lousen.test_10; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; public class SqlTest_6 { public static void main(String[] args){ try { Class.forName("com.mysql.jdbc.Driver"); Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?useSSL=false","lousen", "1135497143"); //String sql = "create table test_3(id int primary key,name varchar(255) not null)"; //建表 //String sql = "alter table test_3 add (sex varchar(10) default '男')"; //修改表 String sql = "drop table test_3"; //删除表 PreparedStatement ps = con.prepareStatement(sql); System.out.println(ps.executeUpdate()); //执行更新并输出受影响的行数 } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
|
五. 操作日期类型
1 2
| String sql = "select last_name,salary,dept_id from s_emp where start_date=? "; prepareStatement.setDate();
|
这里的时间类型是 java.sql.Date
我们通常使用的是 java.util.Date
SimpleDateFormat 类可以帮助我们把String 转化成java.util.Date
java.util.Date 可以通过时间戳,转化成java.sql.Date
实例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| //读mysql数据库日期类型 public static void read(Connection conn) throws Exception { Statement stat = conn.createStatement(); String sql = "select last_name,start_date from s_emp"; ResultSet rs = stat.executeQuery(sql); while(rs.next()) { String name = rs.getString(1); Date date = rs.getDate(2); java.util.Date d = new java.util.Date(date.getTime()); SimpleDateFormat format = new SimpleDateFormat ("YYYY-M-dd HH:mm:ss E"); String str = format.format(d); System.out.println(name+" "+str); } JDBCUtils.close(rs, stat, conn); } //将日期类型写入mysql数据库 public static void write(Connection conn) throws Exception { String sql = "insert into s_emp(id,last_name,start_date)" + " values(?,?,?)"; PreparedStatement prep = conn.prepareStatement(sql); prep.setInt(1, 7777); prep.setString(2, "tom"); SimpleDateFormat format = new SimpleDateFormat ("yyyy-MM-dd HH:mm:ss"); String str = "2018-07-12 14:52:00"; java.util.Date d = format.parse(str); Date date = new java.sql.Date(d.getTime()); System.out.println(date); prep.setDate(3, date); prep.execute(); JDBCUtils.close(null, prep, conn); }
|