JDBC常用操作 (java 的数据库连接)

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 1.常用类与方法 1.1连接 java.sql.Connection 代表与某一数据库的连接。 Connection java.sql.DriverManager.getConnection(String url, String user, String password)  用来连接数据库,URL由 jdbc:  +  ip:port  +dateBaseName组成,一

1.常用类与方法

1.1连接

java.sql.Connection

代表与某一数据库的连接。
Connection java.sql.DriverManager. getConnection(String url, String user, String password) 
用来连接数据库,URL由 jdbc:  +  ip:port  +dateBaseName组成,一个例子:
String url = "jdbc:mysql://115.28.321.123:3306/AliyunDB";
Statement java.sql.Connection. createStatement()
由Connection创建Statement。

1.2 编译/执行sql

1.2.1 Statement

java.sql. Statement
接口,用于执行sql语句并返回结果。定义见下:
public interface Statement extends Wrapper, AutoCloseable {...}
ResultSet java.sql.Statement. executeQuery(String sql) throws SQLException
执行sql查询并返回结果。这个方法被用来执行 SELECT 语句,它几乎是使用最多的 SQL 语句。
int java.sql.Statement. executeUpdate(String sql) 
用于执行INSERT, UPDATE, 或 DELETE等语句。返回值是一个整数,指示受影响的行数(即更新计数)。对于 CREATE TABLE 或 DROP TABLE 等不操作行的语句,executeUpdate 的返回值总为零。
void java.sql.Statement. setQueryTimeout(int seconds) throws SQLException
设置sql语句执行的超时时间。若超时,抛出SQLTimeoutException 异常。
void java.sql.Statement. setFetchSize(int rows)
设置一次性拿到结果的行数。若为0表示不限制。jdbc一次性查询rows行,放在内存中,这样rs.next()的时候没有网络通讯开销,当内存中的数据用完时再接着从服务端拿。
int[] java.sql.Statement. executeBatch() 
提交一批命令给数据库并让其执行。如果所有操作都成功,返回一个数组,大小与更新操作的个数一致。每个元素依次代表对应操作的更新行数。

1.2.2 PreparedStatement 

public interface PreparedStatement extends Statement {}
代表一个预编译的SQL语句,此对象可以多次执行这条SQl语句,只用替换变量即可。
void java.sql.PreparedStatement. addBatch() 
为当前对象的批处理命令增加一个参数集合。
void java.sql.PreparedStatement. setString(int parameterIndex, String x)
设置第parameterIndex个参数索引的内容为x。从1计数。
类似的,还有setInt、setDouble等。

1.3 取结果

java.sql.ResultSet

用于执行一个静态的SQL statement并返回结果。

boolean java.sql.ResultSet. next() throws SQLException
游标从当前行向下移。一个ResultSet对象的初始游标在第一行。

Object java.sql.ResultSet. getObject(int columnIndex) throws SQLException
获取ResultSet对象当前行指定列的信息。
String java.sql.ResultSet. getString(int columnIndex) throws SQLException
同上面的ResultSet.getObject类似,只不过返回是String类型。
String java.sql.ResultSet. getString( String arg0)
同上面的getString()类似,不过形参指定的是列名。
ResultSetMetaData java.sql.ResultSet. getMetaData() 
得到查询结果包含的ResultSetMetaData 。


java.sql. ResultSetMetaData
接口。表示一个ResultSet对象的列信息。
int java.sql.ResultSetMetaData. getColumnCount()
得到列数。
String java.sql.ResultSetMetaData. getColumnName(int column)
获取列名,从1计数。
String java.sql.ResultSetMetaData. getColumnLabel(int column)
获取列的标签,即 'select name as StudentName' 这样的语句,返回的就是"StudentName"。
int java.sql.ResultSetMetaData. getColumnType(int column)
获取列的类型。为int值,同java.sql. Types中的字段对应,包括int,varchar等。

2.事务

void java.sql.Connection.setAutoCommit(boolean autoCommit) throws SQLException
默认为自动提交模式,此时提交的语句都作为单独的事务执行。若设置为false,最后调用Connection.commit()提交,若失败可以Connection.rollback()回滚。

void java.sql.Connection.commit() throws SQLException
当setAutoCommit为false时才能用得到这个函数。
java.sql.Connection.rollback() throws SQLException
回滚当前事物的所有改动。

例子:

try{
	conn = DataSource.getConnection();String sql = "delete from xxTable";
	conn.setAutoCommit(false);st = conn.createStatement();
	num = st.executeUpdate(sql);conn.commit();
	}catch (Exception e) {
		 conn.rollback();
	}

3.存储过程

3.1 相关方法

java.sql. CallableStatement
用于执行存储过程的接口。是PreparedStatement的子接口,定义见下:
public interface CallableStatement extends PreparedStatement {...}
void java.sql.CallableStatement. setInt(String parameterName, int x) throws SQLException
将指定的参数设为 int 类型的x。
void java.sql.PreparedStatement. setInt(int parameterIndex, int x) 
别忘了还有这个继承自父类的方法。

CallableStatement java.sql.Connection. prepareCall(String sql) 
拿到CallableStatement对象,用于执行存储过程。

3.2 例子见下

/*创建存储过程*/
conn = getConnection();
//mysql dialect
String procedureSQL = "create procedure USER_EXIST(in loginName varchar(50),out amount int)" +  
            "begin select count(*) into amount from user where username = loginName ; end "; 
pstmt = conn.prepareStatement(procedureSQL);  
pstmt.executeUpdate();


/*调用存储过程*/
cstmt = conn.prepareCall("{call USER_EXIST(?,?)}");  
cstmt.setString(1, "小明");  
cstmt.registerOutParameter(2, Types.INTEGER); //注册输出参数  
cstmt.execute();  
System.out.println(cstmt.getInt(2)); //与上注册的对应  


4.工程

对于mysql,依赖配置为:

<dependency>
  	<groupId>mysql</groupId>
  	<artifactId>mysql-connector-java</artifactId>
  	<version>5.1.31</version>
</dependency>

对于SqlServer,依赖配置为:

<dependency>
	<groupId>com.microsoft.sqlserver</groupId>
	<artifactId>sqljdbc</artifactId>
	<version>4.0</version>
</dependency>



图3-1 表的结构

例1:JDBC使用

例2:PreparedStatement

//增添一项—— ip,ip解析后信息 ,当前时间
public void insertIP(String ip) throws SQLException{
		PreparedStatement preparedStatement = connection.prepareStatement("INSERT INTO `myTable` (ip,ip_info,date) VALUES(?,?,?)");
		String ipInfo = "中国,上海,上海,中国电信";
		DateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
		String sqlDate=format1.format(new Date());
		preparedStatement.setString(1, ip);
		preparedStatement.setString(2, ipInfo);
		preparedStatement.setString(3, sqlDate);
		preparedStatement.execute();
	}

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1月前
|
数据采集 Java 关系型数据库
Java代码高效连接数据库
Java代码高效连接数据库
16 2
|
16天前
|
存储 NoSQL Java
Java数据库编程指南:实现高效数据存储与访问
【4月更文挑战第2天】Java开发者必须掌握数据库编程,尤其是JDBC,它是连接数据库的标准接口。使用Spring JDBC或JPA能简化操作。选择合适的JDBC驱动,如MySQL Connector/J,对性能至关重要。最佳实践包括事务管理、防SQL注入、优化索引和数据库设计。NoSQL数据库如MongoDB也日益重要,Java有对应的驱动支持。理解这些概念和技术是构建高效数据库应用的基础。
Java数据库编程指南:实现高效数据存储与访问
|
1月前
|
NoSQL Java 数据库连接
使用Java实现从数据库查出数据存入Redis,并在查询时先查Redis,如果Redis中没有数据再从数据库中读取
使用Java实现从数据库查出数据存入Redis,并在查询时先查Redis,如果Redis中没有数据再从数据库中读取
267 1
|
1月前
|
存储 SQL Java
Java数据库备份与恢复的全面指南
Java数据库备份与恢复的全面指南
|
2天前
|
SQL 缓存 Java
Java数据库连接池:优化数据库访问性能
【4月更文挑战第16天】本文探讨了Java数据库连接池的重要性和优势,它能减少延迟、提高效率并增强系统的可伸缩性和稳定性。通过选择如Apache DBCP、C3P0或HikariCP等连接池技术,并进行正确配置和集成,开发者可以优化数据库访问性能。此外,批处理、缓存、索引优化和SQL调整也是提升性能的有效手段。掌握数据库连接池的使用是优化Java企业级应用的关键。
|
27天前
|
Java 数据库
java面向对象高级分层实例_数据库操作类
java面向对象高级分层实例_数据库操作类
10 1
|
28天前
|
安全 Java 数据库连接
jdbc实现批量给多个表中更新数据(解析Excel表数据插入到数据库中)
jdbc实现批量给多个表中更新数据(解析Excel表数据插入到数据库中)
153 0
|
28天前
|
SQL Java 关系型数据库
在Python中编写Java数据库驱动是不可能的
在Python中编写Java数据库驱动是不可能的
|
28天前
|
SQL Java 关系型数据库
Java数据库访问
Java数据库访问
|
29天前
|
前端开发 Java 数据库
HTML、sqlserver数据库和java前七章节的复习(一)
HTML、sqlserver数据库和java前七章节的复习(一)
8 0