Java JDBC连接数据库常见操作总结

网友投稿 436 2023-01-12


Java JDBC连接数据库常见操作总结

本文实例总结了java JDBC连接数据库常见操作。分享给大家供大家参考,具体如下:

db.properties配置文件(mysql数据库)

# db.properties

jdbc.driver=com.mysql.jdbc.Driver

jdbc.url=jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=UTF-8

jdbc.username=root

jdbc.password=123456

# paramter for BasicDataSource

initSize=2

maxActive=2

db.properties配置文件(Oracle数据库)

# db.properties

jdbc.driver=oracle.jdbc.OracleDriver

jdbc.url=jdbc:oracle:thin:localhost:1521:orcl

jdbc.username=root

jdbc.password=123456

# paramter for BasicDataSource

initSize=2

maxActive=2

JDBC直接连接数据库

package JDBC;

import java.io.IOException;

import java.io.InputStream;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;

import java.util.Properties;

/**

* JDBC连接数据库管理工具类

*/

public class JDBC {

static String driver;

static String url;

static String username;

static String password;

static {

try {

Properties cfg = new PrBndRqXWoperties();

InputStream in = JDBC.class.getClassLoader().getResourceAsStream("db.properties");

cfg.load(in); //将文件内容加载到Properties对象中(以散列表形式存在)

driver = cfg.getProperty("jdbc.driver");

url = cfg.getProperty("jdbc.url");

username = cfg.getProperty("jdbc.username");

password = cfg.getProperty("jdbc.password");

in.close();

} catch (IOException e) {

e.printStackTrace();

throw new RuntimeException(e);

}

}

/**

* 创建数据库连接

*/

public static Connection getConnection() {

try {

Class.forName(driver); //注册驱动

Connection conn = DriverManager.getConnection(url, username, password);

return conn;

} catch (Exception e) {

e.printStackTrace();

throw new RuntimeException(e);

}

}

/*

* 关闭数据库的连接

*/

public static void close(Connection conn) {

if (conn != null) {

try {

conn.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

}

通过连接池连接数据库

package JDBC;

import java.io.IOException;

import java.io.InputStream;

import java.sql.Connection;

import java.sql.SQLException;

import java.util.Properties;

import org.apache.commons.dbcp.BasicDataSource;

/**

* 连接池版本的数据库连接管理工具类

*/

public class DBUtils {

private static String driver;

private static String url;

private static String username;

private static String password;

private static int initSize;

private static int maxActive;

private static BasicDataSource dbs;

static {

dbs = new BasicDataSource();

Properties cfg = new Properties();

try {

InputStream in = DBUtils.class.getClassLoader().getResourceAsStream("db.properties");

cfg.load(in);

// 初始化参数

driver = cfg.getProperty("jdbc.driver");

url = cfg.getProperty("jdbc.url");

username = cfg.getProperty("jdbc.username");

password = cfg.getProperty("jdbc.password");

initSize = Integer.parseInt(cfg.getProperty("initSize"));

maxActive = Integer.parseInt(cfg.getProperty("maxActive"));

in.close();

// 初始化连接池

dbs.setDriverClassName(driver);

dbs.setUrl(url);

dbs.setUsername(username);

dbs.setPassword(password);

dbs.setInitialSize(initSize);

dbs.setMaxActive(maxActive);

} catch (IOException e) {

e.printStackTrace();

throw new RuntimeException(e);

}

}

/**

* 创建数据库连接,从连接池中获取连接,如果连接池满了,则等待.

*/

public static Connection getConnection() {

try {

Connection conn = dbs.getConnection();

return conn;

} catch (SQLException e) {

e.printStackTrace();

throw new RuntimeException(e);

}

}

/*

* 关闭数据库的连接,归还到连接池

*/

public static void close(Connection conn) {

if (conn != null) {

try {

conn.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

//回滚,仅在禁用自动提交时使用

public static void rollback(Connection conn) {

if (conn != null) {

try {

conn.rollback();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

}

连接数据库后的使用

Connection conn=null;

try{

conn=DbUtils.getConnection();

Statement st=conn.createStatement();

String sql="select id, name from people";

ResultSet rs=st.executeQuery(sql);

while(rs.next()){

int id=rs.getInt("id");

String name=rs.getString("name");

System.out.println(id+","+name);

}

//结果集元数据

ResultSetMetaData meta = rs.getMetaData();

int n = meta.getColumnCount(); //多少列

for(int i=1; i<=n; i++){

String name= meta.getColumnName(i); //获取列名

System.out.println(name);

}

rs.close();//释放查询结果

st.close();//释放语句对象

}catch(Exception e){

e.printStackTrace();

}finally {

DbUtils.close(conn);

}

预编译SQL执行 及 取消自动提交

try {

conn = DBUtils.getConnection();

conn.setAutoCommit(false); //取消自动提交, 后续手动提交

String sql="update people set name=? where id=? ";

PreparedStatement ps= conn.prepareStatement(sql);

//按照顺序发送参数

ps.setString(1, "Lao Wang");

ps.setInt(2, 100);

//执行"执行计划"

int n=ps.executeUpdate();

conn.commit(); //手动提交

} catch (Exception e) {

e.printStackTrace();

DBUtils.rollback(conn); //异常回滚

}finally{

DBUtils.close(conn);

}

Statement的addBatch(sql)和executeBatch()方法可以批量执行sql。

Statement st=conn.createStatement();

st.addBatch(sql1); //sql1 添加到Statement的缓存中

st.addBatch(sql2);

st.addBatch(sql3);

int[] ary=st.executeBatch(); //执行一批SQL

PreparedStatement也支持批量参数的处理

PreparedStatement ps = conn.prepareStatement(sql);

ps.setInt(1, 1);

ps.setString(2, "wang");

ps.addBatch(); //将参数添加到ps缓存区

ps.setInt(1, 2);

ps.setString(2, "li");

ps.addBatch(); //将参数添加到ps缓存区

int[] ary = ps.executeBatch(); // 批量执行

PreparedStatement ps = conn.prepareStatement(sql);

还可以传入第二BndRqXW个参数用以获取自增主键或者序号自增的列

更多关于java相关内容感兴趣的读者可查看本站专题:《Java使用JDBC操作数据库技巧总结》、《Java+MySQL数据库程序设计总结》、《Java数据结构与算法教程》、《Java文件与目录操作技巧汇总》、《Java操作DOM节点技巧总结》和《Java缓存操作技巧汇总》

希望本文所述对大家java程序设计有所帮助。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:研发管理平台文案工作(关于科技研发的文案)
下一篇:Java实现批量修改txt文件名称的方法示例
相关文章

 发表评论

暂时没有评论,来抢沙发吧~