JDBC使用与理解

2019-10-05  本文已影响0人  吃块西瓜写代码
Statement stmt = conn.createStatement;
String name = "赵六";
String sql = "insert into t_user(username,pwd) values ('jklasd',312)";
stmt.execute(sql);

//sql注入.在这个情形下就能删库了
String id = 5 +"or 1=1";
String sql = "delete from t_user where id="+id;


//测试PreparedStatement
sql = "insert into t_user (username,pwd) values(?,?)"//占位符,避免拼接字符串出问题

PrepardStatement ps = conn.prepareStatement(sql);

ps.setString(1,"lpc");//参数索引从1开始算
ps.setString(2,"123412");

//ps.setObject();
//ps.setDate(4,java.sql.Date(System.currentTimeMills()));//插入的是sql时间。 
ps.excute();


//excute(),excuteQuery()查询,excuteUpdate()更新删除;


//测试ResultSet

sql = "select * from t_user where id>?";
ps.setInt(1,2);

ResultSet rs = ps.excuteQuery();

//rs初始没有指定值
while(rs.next()){
    System.out.println(rs.getInt(1)+"----"+rs.getString(2));//取出第一列
}



//批处理优先使用Statement,预编译要空间 
conn.setAutoCommit(false);//设为手动提交
 
for(int i=0;i<200;i++){
    stmt.addBatch('insert into t_user (username,pwd,regTime) values ('gao')')
}

stmt.executeBatch();
conn.commit();




if(conn!=null){
    rs.close();
    ps.close();
    stmt.close();
    conn.close();//后开的先关,要将三个分开关闭
}

2 事务操作

事务

事务开始于
连接到数据库并执行一条DML语句

事务结束于
-执行COMMIT或ROLLBACK
-执行一条DDL语句
-执行一条DML语句,但该语句失败了
-执行一条DCL语句
-断开与数据库的连接

事务特性
1、原子性
要么全部成功,要么全部失败
2、一致性
一个操作失败时,所有的更改国的数据回到修改前
3、隔离性
事务查看数据时数据所取得状态,要么时另一个并发事务修改它之前得状态,要是是另一事务修改它之后得状态。事务不会查看中间状态
读取未提交
读取已提交
可重复读
序列化
4、持久性
事务完成后,对系统得影响是永久得

//JDBC默认是true
ps1.excute();
ps2.excute();



时间类型1970年为0
java.sql.Date 年月日
java.sql.time 时分秒
java.sql.timestamp 年月日时分秒
创建对象时输入一个long类型的数


Timestamp stamp = new Timestamp(System.currentTimeMills());



时间操作
取出指定时间段的数据

String sql="select * from t_user where regTime>? and regTime<?";

ps = conn.prepareStatement(sql);

public long time(String dateStr){
    DateFormat format = new SimpleDateFormat('yyyy-MM-dd hh:mm:ss');

    
    return format.parse(dataStr).getTime();

}

java.sql.Date start = new java.sql.Date(str2Date("2015-4-10 10:23:45"));
java.sql.Date end = new java.sql.Date(str2Date("2015-4-10 10:23:45"));

ps.setObject(1,start);
ps.setObject(2,end);


pros = new Properties();

pros.load(Thread.currentThread().getContextClassLoader().getResourceAsStream('db.properties'));

大文件读取:用流的方式

//读大文件,用流的方式读入
ps.setClob(2,new FileReader(new File("d:/a.txt"));)

ps.setClob(2,new BufferReader(new InputReader(new ByteArrayInputStream("aaaa".getBytes())));
//
Clob c = rs.getClob("myInfo")
Reader r = c.getCharacterStream();

上一篇下一篇

猜你喜欢

热点阅读