Java JDBC基础小结1

参考文章:https://www.cnblogs.com/luoxn28/p/5274435.html  https://www.yiibai.com/jdbc

JDBC是一个Java应用程序接口,作用是封装了对数据库的各种操作。JDBC由类和接口组成,使用Java开发数据库应用都需要4个主要的接口:Driver、Connection、Statement、ResultSet,这些接口定义了使用SQL访问数据库的一般架构。 

1、JDBC相关类和API

JDBC是一个Java应用程序接口,作用是封装了对数据库的各种操作。JDBC由类和接口组成,使用Java开发数据库应用都需要4个主要的接口:Driver、Connection、Statement、ResultSet,这些接口定义了使用SQL访问数据库的一般架构。

  • Driver接口

Driver接口是所有JDBC程序必须实现的接口,该接口专门提供给数据库厂商使用。编写JDBC程序时,必须制定数据库驱动程序或类库加载到项目classpath中。

  • DriverManager类

DriverManager用于加载JDBC驱动并创建与数据库的连接。其中定义了2个重要的静态方法:

DriverManager.registerDriver(Driver driver) // 用于向DeriverManager注册给定的JDBC驱动程序
DriverManager.getConnection(String url, String user, String pwd) // 建立与数据库的连接,返回表示连接的Connection对象

  • Connection接口

Connection代表与数据库的连接,其中定义了一系列的方法:

Connection.getMetaData(); // 返回表示数据库元数据的DatabaseMetaData对象
Connection.createStatement(); // 创建一个Statement对象
Connection.prepareStatement(String sql); // 创建一个PreparedStatement对象
Connection.prepareCall(String sql); // 创建一个CallableStatement对象来调用数据库存储过程
  • Statement接口

Statement接口用于向数据库发送SQL语句。

Statement.execute(String sql); // 执行各种SQL语句,返回一个boolean类型值,true表示执行的SQL语句具备查询结果,可通过Statement.getResultSet()方法获取 
Statement.executeUpdate(String sql); // 执行SQL中的insert/update/delete语句,返回一个int值,表示受影响的记录的数目 
Statement.executeQuery(String sql); // 执行SQL中的select语句,返回一个表示查询结果的ResultSet对象

 

  • ResultSet接口
ResultSet.next(); // 将游标由当前位置移动到下一行 
ResultSet.getString(String columnName); // 获取指定字段的String类型值 
ResultSet.getString(int columnIndex); // 获取指定索引的String类型值 
ResuleSet.previous(); // 将游标由当前位置移动到上一行

2、程序示例

数据库IP 192.168.1.150,数据库名称为test,数据表名称persion,表结构为:

 JDBC连接MySQL程序示例

package jdbctest;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;


/*
import java.sql.DriverManager;

import com.mysql.jdbc.Connection;
import com.mysql.jdbc.Statement;
 * */
public class DemoJDBC {

	public static void main(String[] args) throws Exception{
		// TODO Auto-generated method stub
		//加载驱动类
		Class.forName("com.mysql.jdbc.Driver");
		
		//通过DriverManager 获取数据库连接
		String url="jdbc:mysql://192.168.50.1/test";

		String user= "root";
		String password = "123456";
		Connection connection= (Connection)DriverManager.getConnection(url, user, password);
		
		//通过Connection对象获取Statement对象,Statement执行SQL语句
		Statement statement = (Statement) connection.createStatement();
		ResultSet resultSet=statement.executeQuery("select * from t_user");
		//操作ResultSet的结果
		while (resultSet.next()) {
			//第一种获取字段的方式
			System.out.println("FIRST--id:"+resultSet.getString(1)+",name:"+resultSet.getString(2)+",age:"+resultSet.getString(3));
			System.out.println("SECOND--id:"+resultSet.getString("id")+",name:"+resultSet.getString("name")
			+",age:"+resultSet.getString("age"));
		}
		//插入数据
		int ret = statement.executeUpdate("insert into t_user values(3,'Jack',21)");
		if(ret>0) {
			System.out.println("----insert ok----");
			resultSet=statement.executeQuery("select * from t_user");
			while (resultSet.next()) {
				//第一种获取字段的方式
				System.out.println("SECOND--id:"+resultSet.getString("id")+",name:"+resultSet.getString("name")
				+",age:"+resultSet.getString("age"));
			}
		}
		connection.close();
		statement.close();
		resultSet.close();
	}

}

执行结果:

 JDBC使用PreparedStatement进行数据插入操作程序示例

package jdbctest;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

import com.mysql.jdbc.PreparedStatement;


/*
import java.sql.DriverManager;

import com.mysql.jdbc.Connection;
import com.mysql.jdbc.Statement;
 * */
public class DemoJDBC2 {

	public static void main(String[] args) throws Exception{
		// TODO Auto-generated method stub
		//加载驱动类
		Class.forName("com.mysql.jdbc.Driver");
		
		//通过DriverManager 获取数据库连接
		String url="jdbc:mysql://192.168.50.1/test";

		String user= "root";
		String password = "123456";
		Connection connection= (Connection)DriverManager.getConnection(url, user, password);
		
		PreparedStatement statement=(PreparedStatement)connection.prepareStatement("insert into t_user values(?,?,?)");
		statement.setInt(1, 4);
		statement.setString(2, "Bob");
		statement.setInt(3, 16);
		statement.executeUpdate();
		
		ResultSet 	resultSet=statement.executeQuery("select * from t_user");
			while (resultSet.next()) {
				//第一种获取字段的方式
				System.out.println("SECOND--id:"+resultSet.getString("id")+",name:"+resultSet.getString("name")
				+",age:"+resultSet.getString("age"));
			}
		
		connection.close();
		statement.close();
		resultSet.close();
	}

}

运行结果:

JDBC数据类型

下表列出了默认的JDBC数据类型与Java数据类型转换,当使用PreparedStatementCallableStatement对象时可调用setXXX()方法或ResultSet.updateXXX()方法。

SQLJDBC/JavasetXXXupdateXXX
VARCHARjava.lang.StringsetStringupdateString
CHARjava.lang.StringsetStringupdateString
LONGVARCHARjava.lang.StringsetStringupdateString
BITbooleansetBooleanupdateBoolean
NUMERICjava.math.BigDecimalsetBigDecimalupdateBigDecimal
TINYINTbytesetByteupdateByte
SMALLINTshortsetShortupdateShort
INTEGERintsetIntupdateInt
BIGINTlongsetLongupdateLong
REALfloatsetFloatupdateFloat
FLOATfloatsetFloatupdateFloat
DOUBLEdoublesetDoubleupdateDouble
VARBINARYbyte[ ]setBytesupdateBytes
BINARYbyte[ ]setBytesupdateBytes
DATEjava.sql.DatesetDateupdateDate
TIMEjava.sql.TimesetTimeupdateTime
TIMESTAMPjava.sql.TimestampsetTimestampupdateTimestamp
CLOBjava.sql.ClobsetClobupdateClob
BLOBjava.sql.BlobsetBlobupdateBlob
ARRAYjava.sql.ArraysetARRAYupdateARRAY
REFjava.sql.RefSetRefupdateRef
STRUCTjava.sql.StructSetStructupdateStruct

JDBC3.0中增强支持BLOBCLOBARRAYREF等数据类型。ResultSet对象可调用UPDATEBLOB()updateCLOB()updateArray()updateRef()方法,使您可以在数据库服务器上直接操作相应的数据。

对于setXXX()updateXXX()方法,可以转换成特定的Java类型到特定的JDBC数据类型。而使用setObject()updateObject()方法,几乎所有的Java类型映射到JDBC数据类型。

ResultSet对象提供相应的getXXX()方法为每个数据类型来检索列值。每一种类型方法,可以使用与列名或由列的序号位置来获取列的数据。

SQLJDBC/JavasetXXXgetXXX
VARCHARjava.lang.StringsetStringgetString
CHARjava.lang.StringsetStringgetString
LONGVARCHARjava.lang.StringsetStringgetString
BITbooleansetBooleangetBoolean
NUMERICjava.math.BigDecimalsetBigDecimalgetBigDecimal
TINYINTbytesetBytegetByte
SMALLINTshortsetShortgetShort
INTEGERintsetIntgetInt
BIGINTlongsetLonggetLong
REALfloatsetFloatgetFloat
FLOATfloatsetFloatgetFloat
DOUBLEdoublesetDoublegetDouble
VARBINARYbyte[ ]setBytesgetBytes
BINARYbyte[ ]setBytesgetBytes
DATEjava.sql.DatesetDategetDate
TIMEjava.sql.TimesetTimegetTime
TIMESTAMPjava.sql.TimestampsetTimestampgetTimestamp
CLOBjava.sql.ClobsetClobgetClob
BLOBjava.sql.BlobsetBlobgetBlob
ARRAYjava.sql.ArraysetARRAYgetARRAY
REFjava.sql.RefSetRefgetRef
STRUCTjava.sql.StructSetStructgetStruct


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值