mysql 使用java代码进行操作_java使用jdbc对mysql数据库进行操作的步骤和代码

java使用jdbc对mysql数据库进行操作的步骤和代码

前言

java程序通过jdbc对mysql进行连接和操作的步骤,主要按照四个步骤:加载驱动、建立连接、创建声明、执行sql语句后的结果集。

1. 加载驱动

在取得连接之前,需要注册驱动程序。通过调用方法Class.forName,这将显式地加载驱动程序类,以下代码分别加载连接ODBC、MySQL、Oracle、SQLServer的驱动类:

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

Class.forName("com.mysql.jdbc.Driver");

Class.forName("oracle.jdbc.driver.OracleDriver");

Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");

此处,本程序事例是使用mysql的驱动类:

try{

Class.forName("com.mysql.jdbc.Driver");

} catch (ClassNotFoundException e){

System.out.println("找不到驱动程序类,加载驱动失败!");

e.printStackTrace();

}

建立连接

JDBC URL

JDBC URL 提供了一种标识数据库的方法,可以是相应的驱动程序能识别该数据库并与之建立连接。JDBC URL的标准语法如下所示。它由三部分组成,各部分间用冒号分隔:

::

: JDBC URL 中的协议总是jdbc

: 驱动程序名或数据库连接机制(这种机制可由一个或多个驱动程序支持)的名称。

:包含要连接数据库的名称、用户名、密码等信息。

以下代码分别是JDBC-ODBC桥、MySQL、Oracle、SQLServer的连接URL举例:

jdbc:odbc:TEST

jdbc:mysql://localhost/db?user=root&password=123&useUnicode=true&characterEncoding=utf-8

jdbc:oracle:thin:@localhost:1521:orcl //"oracle:thin"为连接子协议

jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs

取得Connection连接

通过驱动管理类DriverManager下面的getConnection方法获取数据库的连接对象:

DriverManager.getConnection(url, username, password)

代码示例

String url="jdbc:mysql://localhost:3306/demo";

String username = "root";

String password = "password";

Connection con = null;

try{

con = DriverManager.getConnection(url, username, password);

} catch (SQLException se) {

System.out.println("数据库连接失败!");

se.printStackTrace();

}

创建声明(Statement)

Statement对象用于将SQL语句发送到数据库中。实际上有三种Statement对象,都作为在给定连接上执行SQL语句的包容器:Statement、PreparedStatement(继承自Statement)和CallableStatement(继承自PreparedStatement)。他们都用于发送特定类型的SQL语句:Statement对象用于执行不带参数的简单SQL语句;PreparedStatement对象用于执行带或者不带IN参数的预编译SQL语句;CallableStatement对象用于执行对数据库已存储过程的调用。

Statement接口提供了执行语句和获取结果的基本方法。PreparedStatement接口添加了处理IN参数的方法;而CallableStatement添加了处理OUT参数的方法。

Statement对象

创建Statement对象

用Connection对象的createStatement方法创建,如下例代码:

Statement stmt = con.createStatement();

Statement对象的方法概览

executeQuery: 用于产生单个结果集的语句,比如select语句。

executeUpdate: 用于执行insert、update、delete语句以及SQL DL(数据定义语言)语句。executeUpdate的返回值为整数,指受影响的行数,对于create table和drop table等不操作行的语句,返回值为0。

execute:用于执行返回多个结果集、多个更新计数或两者组合的语句。

源码实例

Statement stmt = con.createStatement();

ResultSet rs = stmt.executeQuery("select * from user");

while(rs.next()){

System.out.println(rs.getString(2)+" "+rs.getString("password")+" " + rs.getString(4));

}

ResultSetMetaData rsmd = rs.getMetaData();

System.out.println(rsmd.getColumnCount()+" "+rsmd.getTableName(2)+" "+rsmd.getColumnLabel(1));

// int rows = stmt.executeUpdate("insert into user values(2, 'user', 'user','user@qq.com')");

// System.out.println(rows);

if(rs!=null){

try{

rs.close();

} catch (SQLException e){

e.printStackTrace();

}

}

if(stmt!=null){

try{

stmt.close();

} catch (SQLException e){

e.printStackTrace();

}

}

PreparedStatement

创建及方法

创建:PreparedStatement pstmt = con.prepareStatement(sql)

方法:

pstmt.setString(int, "String")

pstmt.setInt(int, int)

示例代码

PreparedStatement pstmt = con.prepareStatement("update user set email=? where username like ?");

pstmt.setString(1,"cde@126.com");

pstmt.setString(2, "admin");

pstmt.executeUpdate();

pstmt.setString(2, "user");

pstmt.executeUpdate();

String[] userName = {"admin","user"};

String[] email = {"admin@163.com", "user@qq.com"};

int len = userName.length;

for(int i=0; i

pstmt.setString(1, email[i]);

pstmt.setString(2, userName[i]);

int n = pstmt.executeUpdate();

System.out.println(n); // n = 1

// pstmt.executeUpdate("create table ...");

// System.out.println(n); // n = 0

}

执行sql语句后的结果集

ResultSet 基本处理方法

ResultSet对象维持一个指向当前行的指针。next()方法返回值为布尔型,true代表当前指向行存在值,false代表没有下一行记录了,结果集已处理完毕。

ResultSet对象获取列的值,通过getInt(column|column_name)或者getString(column|column_name)

示例代码

ResultSet rs = stmt.executeQuery("select * from user");

while(rs.next()){

System.out.println(rs.getString(2)+" "+rs.getString("password")+" " + rs.getString(4));

}

其他

ResultSetMetaData

代码事例:

ResultSetMetaData rsmd = rs.getMetaData();

System.out.println(rsmd.getColumnCount()+" "+rsmd.getTableName(2)+" "+rsmd.getColumnLabel(1));

参考文档

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值