您的位置:首页 > 编程语言 > Java开发

Java JDBC基础知识

2017-01-24 20:54 477 查看
[b]JDBC学习笔记[/b]
[b]01 开发JDBC的一般步骤:[/b]
    导入厂商提供的数据库驱动
    注册驱动
连接数据库
操作数据库
关闭资源
 
[b]02
向MyEclipse导入JDBC jar包
[/b]
访问相关网站下载MySql的jar包


 
 
[b]03
注册驱动
[/b]
DriverManager.registerDriver(new com.mysql.jdbc.Driver()); 注册方式一
Class.forName("com.mysql.jdbc.Driver"); 注册方式二
注意:两种均可,选一种即可,但推荐使用方式二进行注册,因为驱动实现类中的静态代码已经调用过
 
[b]04
连接数据库
[/b]
Connection conn =  DriverManager.getConnection("jdbc:mysql://localhost:3306/day05","root","123");
“day05t” :数据库名称,这里根据实际情况而定
“root”   :数据库账户名,这里根据实际情况而定
“123”   :数据库密码,这里根据实际情况而定
URL写法格式:大协议:子协议://IP地址:端口号/库名?参数键=参数值
 
[b]05
操作数据库
[/b]
Statement st = conn.createStatement();
String sql = "insert into t_user values (NULL,'tom','18')";
st.executeUpdate(sql);
 
[b]06
关闭资源
[/b]
st.close();
conn.close();

 
[b]07 注意事项[/b]
        7.1、在写入相关语句的时候相应的要引入一些包类
7.2、Statement 是 Java 执行数据库操作的一个重要接口,用于在已经建立数据库连接的基础上,向数据
1182f

    库发送要执行的SQL语句。Statement对象,用于执行不带参数的简单SQL语句。
 
[b]08  JDBC中的对象[/b]
DriverManager:注册驱动,获得连接
Connection:代表访问数据库的连接,可以根据该对象创建运送sql语句的Statement对象
Statement:用于装载要执行的sql语句
createStatement():创建Statement对象
prepareStatement():创建preparedStatement对象
execute:原始,增删改查均可,返回值:true|有结果集,false|无结果集
executeBatch:批量执行sql
executeUpdate:执行增删改操作,返回结果是受影响的行数
executeQuery:执行查询,返回一个结果集ResultSet
ResultSet:用于装载返回数据库查询的结果
如何遍历结果:
while(rs.next())
{
rs.getInt(“查询表中对应的字段名”);
rs.getString(查询表中对应的字段序列); 
}
next():用于将指针向下移动一行,并判断是否有数据
rs.getXXX:XXX为数据库中的数据类型对应的java中的数据类型
查询表中的对应的数据库表中字段的序列从1开始而非从0开始
数据库中的类型对应的Java当中的数据类型:
int int
double double
decimal double
char String
varchar String
datetime Date
timestamp Timestamp/Date
ResultSet结果集的滚动:
移动指针就是结果集的滚动,主要有以下几种滚动方法:
next():将光标从当前位置向前移动一行
previous:将光标移动到此ResultSet对象的上一行
absolute():将光标移动到ResultSet指定的行号
frist:将光标移动到ResultSet对象的第一行
last:将光标移动到ResultSet对象的最后一行
结果集反向修改数据库:
默认情况下ResultSet是不能反向修改数据库中的记录的,需要在创建Statement对象时,
通过Statement createStatement(参数一,参数二);
参数一:结果集类型
参数二:结果集是否支持修改类型
[具体请参见网络资源]
 
[b]09 SQL中的注入问题[/b]
注入方法:OR 1=1 -- 
注入原理:将与条件变成or条件并屏蔽后边的验证或者继续使用or关键字构造特殊sql语句
解决方法:可以借助java中的prepareStatement不让用户参与sql语句的构造拼装
      prepareStatement语句在执行的时候先编译sql语句再往里传参,这样就避免了让参
 数直接参与sql语句的构造
 但顺序需要改变:
 之前的顺序:1、创建Statement对象 2、书写sql语句 3、对象.执行方式(sql);
 使用prepareStatement的顺序:
  书写Sql语句
创建prepareStatement对象:conn.prepareStatement(sql);
注意:这里的sql语句中的参数全用?填充代替
prepareStatement.setXXX(参数1,参数2);
参数1、?对应的序列
参数2、?对应的值
prepareStatement对象.执行方式();
 
[b]10  MySql存取大文本[/b]
存取大文本必须使用prepareStatement对象
insert into 表名 values (null,?);
ps.setCharacterStream(参数1,参数2,参数3);
参数1:参数对应的?的索引,从1开始
参数2:需要保存的文本的流
             File f = new File(“src/text.txt”);
FileReader reader = new FileReader(f);
ps.setCharacterStream(1,reader,(int)f.length());
参数3:文件长度
 
[b]11  MySql如何存取二进制文本[/b]
基本内容要求同上
File f = new File(“scr/tp.PNG”);
InputStream is = new FileInputStream(f);
ps.setBinaryStream(参数1,参数2,参数3);
参数1:?对应的索引序列
参数2:二进制流
参数3:文件的长度,注意这里要强制转换成int
 
[b]12
批量执行
[/b]
Statement st = conn.createStatement();
st.addBatch(“create table...”);
st.addBatch(“...”);
...
st.addBatch(“...”);
int [] results = st.executeBatch();
批量执行一般不执行查询操作
批量执行中prepareStatement的效率要高一些:因为prepareStatement只编译一次执行运送参数多次
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息