关于jdbc的各种使用分享
发布日期:2021-05-20 08:01:14 浏览次数:17 分类:精选文章

本文共 7952 字,大约阅读时间需要 26 分钟。

关于JDBC的各种使用分享

JDBC(Java Database Connection)是Java编程中常用的数据库连接技术,能够支持各种关系型数据库。以下将分享 JDBC 的一些实际使用方法和技巧。

一、JDBC 的简单使用

为了使数据库能够被もり JDBC 驱动程序识别,我们首先需要加载正确的 JDBC 驱动程序。以下是一个简单的示例代码片段:

package com.example.jdbc;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class TestJdbc {
public static void main(String[] args) throws SQLException {
// JDBC 驱动程序的名字
String driver = "com.oracle.jdbc.Driver";
// 数据库连接 URL
String url = "jdbc:oracle:thin:@//132.77.74.87/lyxt";
// 数据库用户名和密码
String username = "admin";
String password = "admin";
// 创建 Statement 对象
Statement stmt = null;
try {
Class.forName(driver);
// 获取数据库连接
java.sql.Connection con = DriverManager.getConnection(url, username, password);
stmt = con.createStatement();
// 执行 SQL 查询
String sql = "SELECT * FROM RESOURCE_OA";
ResultSet res = stmt.executeQuery(sql);
// 获取结果集的元数据
ResultSetMetaData rsmd = res.getMetaData();
// 获取结果的数量
int count = rsmd.getColumnCount();
// 读取结果并打印
StringBuffer sb = new StringBuffer();
while (res.next()) {
sb.append controls, 但这样会导致运行时错误。请确保你既读取了 ResultSetMetaData,又正确遍历 ResultSet 对象。
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (con != null) {
con.close();
}
if (stmt != null) {
stmt.close();
}
if (res != null) {
res.close();
}
}
}
}

二、JDBC 查询数据数量

如果你需要查询数据库中某个表的记录数量,可以使用以下方法。以下是完整的代码片段:

package com.example.jdbc;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.ResultSet;
public class JdbcCountData {
public static void main(String[] args) {
// parameters for database connection
String url = "jdbc:oracle:thin:@//132.77.74.87/lyxt";
String username = "admin";
String password = "admin";
String sql = "SELECT COUNT(*) FROM RESOURCE_OA";
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
int count = 0;
try {
Class.forName("com.oracle.jdbc.Driver");
conn = DriverManager.getConnection(url, username, password);
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
while (rs.next()) {
count = rs.getInt(1);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 确保数据库资源被释放
if (conn != null) {
conn.close();
}
if (ps != null) {
ps.close();
}
if (rs != null) {
rs.close();
}
}
}
}

三、JDBC 查询数据并生成列表

为了方便数据处理,可以将查询结果转换为列表形式。以下是一个实现该功能的代码片段:

package com.example.jdbc;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class JdbcListData {
public static ResultSet getResultSet(Connection conn, String sql) {
try {
PreparedStatement ps = conn.prepareStatement(sql);
return ps.executeQuery();
} catch (SQLException e) {
e.printStackTrace();
}
}
public static Connection getMySQLConnection() {
Connection conn = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root", "root");
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
public static List
listData(String sql) {
List
list = new ArrayList<>();
Connection conn = getMySQLConnection();
ResultSet rs = getResultSet(conn, sql);
try {
while (rs.next()) {
String data = rs.getString(1);
list.add(data);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
rs.close();
if (conn != null) {
conn.close();
}
}
return list;
}
public static void main(String[] args) {
List
dataList = listData("SELECT name FROM user_table");
System.out.println("结果列表: " + dataList);
}
}

四、JDBC 批处理

对于需要批量执行 SQL 语句的情况,JDBC 提供了批处理功能,可以提高处理效率。以下是一个批量执行 SQL 的实现:

package com.example.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.List;
import java.util.ArrayList;
public class JdbcBatch {
public static void executeSQLs(Connection conn, List
sqls) {
try {
if (conn == null) {
throw new SQLException("数据库连接为空!");
}
Statement stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.EMPTY_RESULTSET);
for (String sql : sqls) {
stmt.addBatch(sql);
}
stmt.executeBatch();
System.out.println("批量执行成功!");
// 关闭资源
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
List
sqlList = new ArrayList<>();
sqlList.add("UPDATE user_table SET name = '张三';");
sqlList.add("UPDATE user_table SET name = '李四';");
Connection conn = getMySQLConnection();
executeSQLs(conn, sqlList);
}
}

五、JDBC 执行不带参数的存储过程

存储过程是数据库中用户定义的子程序,可以通过 JDBC 调用。以下是一个调用不带参数的存储过程的示例:

package com.example.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class JdbcProcedure {
public static void callProcedure(String procedureName) {
Connection conn = null;
try {
System.out.println("执行存储过程: " + procedureName);
Class.forName("com.oracle.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@//132.77.74.87/lyxt", "admin", "admin");
// 准备调用存储过程的语句
CallableStatement cs = conn.prepareCall("{call " + procedureName + "}");
cs.execute();
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (conn != null) {
conn.close();
}
}
}
public static void main(String[] args) {
callProcedure("procedure_name");
}
}

六、执行带参数的存储过程

对于带参数的存储过程,可以按照以下步骤进行调用。以下是一个实现示例:

package com.example.jdbc;
import java.sql_CONNECTION;
import java.sql.DriverManager;
import java.sql.CallableStatement;
import java.sql.SQLException;
public class JdbcNamedParameter {
public static void testStoredProcedure() {
System.out.println("正在执行带参数的存储过程");
Connection conn = getMySQLConnection();
try {
CallableStatement cs = conn.prepareCall("{call insert_user(? , ?)}");
cs.setString(1, "张三");
cs.setInt(2, 30);
cs.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (conn != null) {
conn.close();
}
}
}
public static void main(String[] args) {
testStoredProcedure();
}
}

以上是一些常见的 JDBC 使用方法和技巧,希望对你有所帮助!

上一篇:web项目各层功能区分(SSH举例)
下一篇:用Ajax实例来分享Ajax简单使用

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2025年04月17日 08时45分46秒