JDBC 就是用 JAVA 语言操作关系型数据库的一套 API
全称:(Java DataBase Connectivity) Java 数据库连接
写 JDBC 前需导入驱动 jar 包(以 mysql 数据库为例)
//注册驱动(mysql5 之后的版本此步可省略)
Class.forName("com.mysq.jdbc.Driver");
//获取连接,Java代码需要发送SQL给MySQL服务端,就需要先建立连接
Connection conn = DriverManager.getConnection(url, username, password);
//定义SQL语句
String sql = “update…” ;
//获取执行SQL对象,执行SQL语句需要SQL执行对象,而这个执行对象就是Statement对象
Statement stmt = conn.createStatement();
//执行SQL
stmt.executeUpdate(sql);
//处理结果
...;
//释放资源
stmt.close();
conn.close();
注册驱动
DriverManager.registerDrever();
Class.forName() 底层便是通过调用该方法来实现驱动的注册
获取数据库连接
| static Connection | getConnection(String url, String user, String password) | 尝试建立与给定数据库URL的连接 |
|---|
参数说明:
url : 连接路径
语法:jdbc:mysql://ip地址(域名):端口号/数据库名称?参数键值对1&参数键值对2…
示例:jdbc:mysql://127.0.0.1:3306/db1
细节:
如果连接的是本机mysql服务器,并且mysql服务默认端口是3306,则url可以简写为:jdbc:mysql:///数据库名称?参数键值对
配置 useSSL=false 参数,禁用安全连接方式,解决警告提示
user :用户名
poassword :密码
作用:获取执行 SQL 的对象,管理事务
获取执行对象
普通执行SQL对象
Statement createStatement()
快速入门中就是通过该方法获取的执行对象
预编译SQL的执行SQL对象:防止SQL注入
PreparedStatement prepareStatement(sql)
通过这种方式获取的 PreparedStatement SQL语句执行对象可以防止SQL注入
执行存储过程的对象
CallableStatement prepareCall(sql)
通过这种方式获取的 CallableStatement 执行对象是用来执行存储过程的
事务管理
开启事务
| void | setAutoCommit(boolean autoCommit) | 将此连接的自动提交模式设置为给定状态 |
|---|
参与autoCommit 表示是否自动提交事务,true表示自动提交事务,false表示手动提交事务。而开启事务需要将该参数设为为false。
提交事务
| void | commit() | 提交事务,并释放此 Connection对象当前持有的所有数据库锁 |
|---|
回滚事务
| void | rollback() | 回滚事务,并释放此 Connection对象当前持有的所有数据库锁 |
|---|
例:
try {
// ============开启事务==========
conn.setAutoCommit(false);
//5. 执行sql
int count1 = stmt.executeUpdate(sql1);//受影响的行数
//6. 处理结果
System.out.println(count1);
int i = 3/0;
//5. 执行sql
int count2 = stmt.executeUpdate(sql2);//受影响的行数
//6. 处理结果
System.out.println(count2);
// ============提交事务==========
//程序运行到此处,说明没有出现任何问题,则需求提交事务
conn.commit();
} catch (Exception e) {
// ============回滚事务==========
//程序在出现异常时会执行到这个地方,此时就需要回滚事务
conn.rollback();
e.printStackTrace();
}
Statement对象的作用就是用来执行SQL语句。而针对不同类型的SQL语句使用的方法也不一样
执行DDL、DML语句
| int | executeUpdate(String sql) | 执行给定的SQL语句 |
|---|
执行DQL语句
| ResultSet | executeQuery(String sql) | 执行给定的SQL语句,返回单个ResultSet对象 |
|---|
作用:封装了SQL查询语句的结果
注意:使用后需释放资源
而执行了DQL语句后就会返回该对象,对应执行DQL语句的方法如下:
ResultSet executeQuery(sql);
要从 ResultSet 对象中获取我们想要的数据。ResultSet 对象提供了操作查询结果数据的方法
boolean next()
xxx getXxx(参数)
xxx : 数据类型;如: int getInt(列的编号) ;String getString(列的名称)
作用:通过将敏感字符进行转义预防SQL注入问题
获取 PreparedStatement 对象
// SQL语句中的参数值,使用?占位符替代
String sql = "select * from user where username = ? and password = ?";
// 通过Connection对象获取,并传入对应的sql语句
PreparedStatement pstmt = conn.prepareStatement(sql);
为设置为 ? 参数赋值
PreparedStatement对象:setXxx(?的位置编号<从1 开始>,?的值);
执行SQL语句
| executeUpdate(); | 执行DDL语句和DML语句 |
|---|---|
| executeQuery(); | 执行DQL语句 |
注意:调用这两个方法时不需要传递SQL语句,因为获取SQL语句执行对象时已经对SQL语句进行预编译了。
负责分配、管理数据库连接(Connection),它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个
标准接口:DataSource
官方(SUN) 提供的数据库连接池标准接口,由第三方组织实现此接口。该接口提供了获取连接的功能:
Connection getConnection()
那么以后就不需要通过 DriverManager 对象获取 Connection 对象,而是通过连接池(DataSource)获取 Connection 对象。
常用的数据库连接池:Druid(德鲁伊)
Druid连接池是阿里巴巴开源的数据库连接池项目
功能强大,性能优秀,是Java语言最好的数据库连接池之一
Driud使用
public static void main(String[] args) throws Exception {
//1.导入jar包
//2.定义配置文件
//3. 加载配置文件
Properties prop = new Properties();
prop.load(new FileInputStream("配置文件路径"));
//4. 获取连接池对象
DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);
//5. 获取数据库连接 Connection
Connection connection = dataSource.getConnection();
//获取到了连接后就可以继续做其他操作了
}
1.什么是JDBC?Java数据库连接,(JavaDatabaseConnectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。JDBC也是SunMicrosystems的商标。我们通常说的JDBC是面向关系型数据库的。简而言之,JDBC就是JDK提供的关于数据库操作的一套接口规范,不同数据库厂商来负责实现这个接口,完成指定的操作。用程序和数据建立连接,分为三步骤:1.连接数据库2.执行SQL语句3.把查询到的结果集转换成JAVA对象2.对于MySQL的JDBC编程的前期准备工作知识拓展:JAR文件(Java归
目录1.数据库编程:JDBC2.JDBC工作原理3.JDBC使用3.1驱动包的下载与导入3.2JDBC使用步骤(插入)4.JDBC修改删除查询1.将数据库驱动包,添加到项目依赖中创建目录,拷贝jar包,然后addaslibrary2.创建数据源DataSourse:数据源,描述了数据库服务器在哪里3.和数据库建立连接使用JDBC里的Connection将代码和数据库服务器进行连接一个程序中,通常有一个数据源对象,可以有多个Connection对象4.构造sql语句PreparedStatement:表示一个预处理过的SQL语句对象5.执行sql语句(1)executeUpdate对应插入到删除
goversiongo1.8.1windows/amd64我正在导入"github.com/mattn/go-oci8""database/sql"用于连接到我的oracle数据库。在这里,当我在连接字符串中提供数据库用户名、密码、端口和表名时funcopenAndConnectToDb(sbconfigConnectorConfig)*sql.DB{logger:=sbgoclient.Loglogger.Println("Openthedatabase")//oraprop:=LoadConfig("oraproperties.yml")fmt.Println("Loadconfi
我有一个hibernate.cfg.xml,其中配置了JDBCUrl:jdbc:mysql://${server.hostname}:3306/dsm?zeroDateTimeBehavior=convertToNull&jdbcCompliantTruncation=true&autoReconnect=true这些&是必需的(而不仅仅是&)以避免异常:对实体“jdbcCompliantTruncation”的引用必须以“;”结尾分隔符。为了能够通过Maven选择不同的目标数据库,我想将其更改为:${jdbc.url}其中${jdbc.url}是Maven中定义的属性
有人可以告诉我在我的ApplicationContext中我必须使用beans:bean而不是bean的什么以及如何修复它。 最佳答案 说明。基本上,您在这里处理的是XML命名空间。Spring配置允许您使用来自不同命名空间的配置元素作为一种扩展基本beans命名空间配置的方式,具有方便的特定于域的配置,如上述案例中的安全配置。如果您的配置文件集中在这些扩展命名空间之一——再次,让我们以安全性为例——如果您将默认命名空间声明为扩展命名空间而不是标准beans命名空间。就是这样xmlns="http://www.springframe
我正在寻找从JDBC结果集中获取XML文档的最佳方法。XML的结构不是很重要,但它应该相当快。为了清楚起见,我想要结果集中的数据和足够的元数据来识别数据(本质上是字段名称)。我目前正在使用MySQL、DB2、SQLServer,但解决方案需要与数据库无关(对于SQLServer中的XML不是一个可行的选择)。 最佳答案 通过使用WebRowSet,一次可以将整个ResultSet转换成XML。WebRowSet生成的XML非常清晰和简单,我不确定速度,因为它还取决于驱动程序实现。这里有一篇关于WebRowSetusingOracle
如何将此log4j2.xml配置片段转换为log4j2.properties格式?我不能在我的maven+netbeans项目中使用XML格式,因为我根本无法让log4j2解析和响应log4j2.xml文件-无论我将它放在项目中的什么位置,它都会被log4j2忽略。但是main/resource中的log4j2.properties被解析并响应,所以我-必须-使用.properties...:我通过官方ApacheMavenlog4j工件使用log4j22.10.0。什么是-correct-log4j2.properties配置才能100%等同于上述配置?我几乎连续两天都在让JDBCa
如何将oracleXMLElement获取到JDBC?java.sql.Statementst=connection.createStatement();//worksoracle.jdbc.OracleResultSetrs=st.execute("SELECTXMLElement("name")FROMdual");rs.getString(1);//returnsnull,why?oracle.sql.OPAQUE=(OPAQUE)rs.getObject(1);//thisworks,butwtfisOPAQUE?基本上,我想读取像这样的字符串或任何XML格式的输出。但是我总是
我看到有些人使用org.apache.commons.dbcp.BasicDataSource而其他配置有com.mchange.v2.c3p0.ComboPooledDataSource。Spring有自己的:org.springframework.jdbc.datasource.DriverManagerDataSource可能还有更多。但哪个最好?我有一个需要连接池的JPA/Hibernate三层应用程序,但看起来它们都支持这个.... 最佳答案 Springhasitsown:org.springframework.jdbc
我的团队使用带有JTDS驱动程序的纯JDBC(无连接池),用Java构建了一个连接到Windows2003Server中的SQLServer2005的Windows服务。一段时间后,打开数据库连接的方法开始使用以下堆栈跟踪引发异常:java.net.BindException:Addressalreadyinuse:connectatjava.net.PlainSocketImpl.socketConnect(NativeMethod)atjava.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:305)atjava.net.Pla