1 Statement和PreparedStatement的特点
对于创建和删除表或数据库,我们可以使用executeUpdate(),该方法返回0,表示未影向表中任何记录
对于创建和删除表或数据库,我们可以使用execute(),该方法返回false,表示创建和删除数据库表
除了select操作返回true之除,其它的操作都返回false
有发下的特点:
>>解决SQL注入问题,在绑定参数时,动态检测
>>在发送相同结构的SQL时,较Statement效率有所提升
使用?占位符替代真实的绑定值
>>项目中,优先使用PreparedStatement
*2 Jsp+Servlet+Javabean+Jdbc+Mysql(用户登录与注册)
总结:
如何在Servlet处理类似的业务逻辑
doGet/doPost
private login()
private register()
学会层与层之间的耦
*3 MySQL数据库分页
为什么要分页?
数据库中有没有分页的语句?
第几条记录号-1,需要显示记录的条数;
为什么返回List不行,需要返回Page类?
思考:分页的其它方式
*4 存取大对象
LOB
有四个子类型)[字符]
存:
pstmt.setString(1,UUID.randomUUID().toString());
URL url = Demo1.class.getClassLoader().getResource("cn/itcast/web/jdbc/config/62.txt");
File file = new File(url.getPath());
Reader reader = new FileReader(file);
pstmt.setCharacterStream(2,reader,(int)file.length());
取:
Reader reader = rs.getCharacterStream("content");
Writer writer = new FileWriter("d:\\62.txt");
int len = 0;
char[] cuf = new char[1024];
while( (len=reader.read(cuf))>0 ){
writer.write(cuf,0,len);
}
reader.close();
writer.close();
注意:在能完成业务的情况下,尽早关闭连接对象
SQL到数据库方,并不是不能读写数据
有四个子类型)[字节]
存:
pstmt.setString(1,UUID.randomUUID().toString());
URL url = Demo2.class.getClassLoader().getResource("cn/itcast/web/jdbc/config/d1.jpg");
File file = new File(url.getPath());
InputStream is = new FileInputStream(file);
pstmt.setBinaryStream(2,is,(int)file.length());
取:
is = rs.getBinaryStream("content");
os = new FileOutputStream("d:\\d1.jpg");
int len = 0;
byte[] buf = new byte[1024];
while( (len=is.read(buf))>0 ){
os.write(buf,0,len);
}
*5 批处理
想发送多条SQL,又要降低与数据库系统的交互,这时使用批处理
对象:适合对不同结构的SQL做批处理操作
对象:适合对相同结构的SQL做批处理操作
6 获取数据库主键值
当需要获取刚插入主键信息的时候,需要使用获取主键值方法
关键代码:
pstmt = conn.prepareStatement(sqlA,Statement.RETURN_GENERATED_KEYS);
rs = pstmt.getGeneratedKeys();
if(rs.next()){
Long temp = (Long) rs.getObject(1);
pid = temp.intValue();
}
7 存储过程
PreparedStatement重构CURD操作
@Test
public void create() {
Connection conn=null;
PreparedStatement pstmt=null;
ResultSet rs = null;
String sql = "insert into user1(username,password,salary) values(?,?,?)";
try {
conn=JdbcUtil.getMySqlConnection();
pstmt=conn.prepareStatement(sql);
pstmt.setString(1, "zhangtingting1");
pstmt.setString(2, "123456");
pstmt.setFloat(3, 1111);
pstmt.executeUpdate();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
JdbcUtil.close(rs);
JdbcUtil.close(pstmt);
JdbcUtil.close(conn);
}
}
@Test
public void read() {
Connection conn=null;
PreparedStatement pstmt=null;
ResultSet rs = null;
String sql = "select * from user1 where username=?";
try {
conn=JdbcUtil.getMySqlConnection();
pstmt=conn.prepareStatement(sql);
pstmt.setString(1, "zhangtingting3");
rs = pstmt.executeQuery();
while (rs.next()) {
int id = rs.getInt("id");
String username = rs.getString("username");
String password = rs.getString("password");
float salary = rs.getFloat("salary");
System.out.println("id="+id+"\t"+"username="+username+"\t"+"password="+password+"\t"+"salary="+salary);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
JdbcUtil.close(rs);
JdbcUtil.close(pstmt);
JdbcUtil.close(conn);
}
}
逻辑分页 java 逻辑分页和数据库分页
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Java逻辑分页代码
前台jsp代码如下: 后台Java代码如下:
ide java html javascript 模版 -
ansible etc目录
Ansible-playbok的核心元素之一;角色 角色(roles): 角色集合: roles/ mysql/ httpd/ nginx/ memcached/ 每个角色,以特定的层级目路结构进行组织; 如; mysql/ -
ansible etc目录 ansible 服务器 memcached 数据库 -
python中divs是什么意思
数学运算(7个) 类型转换(24个) 序列操作(8个) 对象操作(7个) 反射操作(8个) 变量操作(2个) 交互操作(2个) &nb
python中divs是什么意思 迭代 bc 字符串