JDBC连接mysql及操作

本文详细介绍了使用JDBC连接MySQL数据库的基本步骤,包括所需的mysql-connector-java驱动,并提供了创建连接的示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。

如果要使用数据库就要添加数据库的驱动,不同的数据库有不用的驱动,本文主要介绍JDBC连接mysql的基本步骤和操作,用到的驱动为:

mysql-connector-java-XXX-bin.jar

创建连接

首先创建一个产生数据库连接的类,代码如下:

package db;

import java.sql.*;

public class Connector {
	// Change the parameters accordingly.
	private static String dbUrl = "jdbc:mysql://127.0.0.1:3306/dblp?useUnicode=true&characterEncoding=utf-8";
	private static String user = "root";
	private static String password = "123";

	public static Connection getConn() {
		try {
			Class.forName("com.mysql.jdbc.Driver");
			return DriverManager.getConnection(dbUrl, user, password);
		} catch (Exception e) {
			System.out.println("Error while opening a conneciton to database server: "
								+ e.getMessage());
			return null;
		}
	}
}



在使用getConn返回的mysql连接之前需要将JDBC连接mysql的驱动jar包添加到build path中。


使用示例

代码如下:
package test;

import java.sql.*;

import db.Connector;

public class TestConn {

	public static void main(String[] args) throws SQLException {
		// TODO Auto-generated method stub
		Connection conn = Connector.getConn();
		Statement stmt = conn.createStatement();
		
		/*
		 * 执行静态sql语句
		 */
		
		//创建表
		String sql = "create table student(stu_no char(20), stu_name varchar(20),primary key(stu_no))";
		stmt.executeUpdate(sql);
		
		String sql1= "INSERT INTO student(stu_no, stu_name)"
                + " VALUES ('2016001','tom')";    // 插入数据的sql语句
		//executeUpdate返回受影响的行数,返回-1表示执行失败
		stmt.executeUpdate(sql1);
		
		String sql2 = "SELECT * FROM tb_user";
		//ResultSet对象接收查询返回的结果,可对结果进行遍历
		ResultSet rs = stmt.executeQuery(sql2);
		while (rs.next()) {
            System.out .println(rs.getString(1) + "\t" + rs.getString(2));// 入如果返回的是int类型可以用getInt()
        }
		
		/*
		 * 执行动态sql语句
		 */
		
		PreparedStatement pstmt = conn.prepareStatement("INSERT INTO student(stu_no, stu_name)  VALUES (?, ?)");
		pstmt.setString(1,"2016002");
		pstmt.setString(2, "Jerry");
		pstmt.executeUpdate();
		
		/*
		 * 批处理
		 * 普通的执行过程是:每处理一条数据,就访问一次数据库;
		 * 而批处理是:累积到一定数量,再一次性提交到数据库,减少了与数据库的交互次数,所以效率会大大提高
		 * JDBC的批处理不能加入select语句,否则会抛异常.
		 */
		
		//关闭自动执行
		conn.setAutoCommit(false);
		//批处理
		Statement bstmt = conn.createStatement(); 
		bstmt.addBatch("INSERT INTO student(stu_no, stu_name)  VALUES ('2016003','Jack')" );
		bstmt.addBatch("INSERT INTO student(stu_no, stu_name)  VALUES ('2016004','Marry')" );
		bstmt.addBatch("INSERT INTO student(stu_no, stu_name)  VALUES ('2016005','Jackson')" );
		pstmt.executeBatch();
		conn.commit();
		
		//或者:
		for(int i=0; i<10000; i++){
            pstmt.setString(1, "2016"+i);
            pstmt.setString(2, " abc"+i);
            pstmt.addBatch();//添加到同一个批处理中
        }
        pstmt.executeBatch();//执行批处理        
        conn.commit();
        conn.setAutoCommit(true);
		
        //如果使用了addBatch() -> executeBatch()还是很慢,需要在数据库连接url后面加上参数 rewriteBatchedStatements=true (启动批处理操作)
       // String dbUrl = "jdbc:mysql://127.0.0.1:3306/dblp?rewriteBatchedStatements=true";
        
        /*
         * 事务处理
         * 事物是指一组原子操作,要么全部执行,要么一个都不执行
         */
        
        //关闭自动提交
        conn.setAutoCommit(false); 
        try{
        	/*
         * 事物代码
         */
            conn.commit();
        }catch(Exception e){
        	conn.rollback();
        	e.printStackTrace();
        }finally{
        	conn.close();
        }
        
	}

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值