mysql JDBC总结

今天复习了下jdbc操作数据库,其实通过复习,感觉对类的熟悉和方法的运用都是小事,毕竟有API都可以查得到。
  关键是一些设计,

1、  比如:

  Class.forName("");这个是用来加载驱动,获取driver实例,并在加载的过程中注册到了DriverManager中,由后者去管理。

所以:在DriverManager.getConnection()时,发生的操作有:Drivermanager查找已经注册的列表,然后根据url去对应,最后通过driver获取数据库连接,假如有注册的重复的驱动,默认最先匹配的那个驱动为正确结果。在DriverManager中提供了关于一些driver的管理机制,包括重复的一些处理。

2、 PreparedStatement,Statement

两者的区别:前者相当于sql预编译,在程序执行的时候已经把sql编译好,尽管它可以动态传参,这也提高了执行效率。

     前者还可以防止sql注入

       如果基本数据库和驱动程序在语句提交之后仍保持这些语句的打开状态,则同一个 PreparedStatement 可执行多次。如果这一点不成立,那么试图通过使用                       PreparedStatement对象代替 Statement 对象来提高性能是没有意义的。

示例:

1 pstmt.setString(1, "Hi");
2 for (int i = 0; i < 10; i++) {
3 pstmt.setInt(2, i);
4 int rowCount = pstmt.executeUpdate();
5 } 

3、ResultSet提供了很好的结果集管理机制,主要实现了java.sql.ResultSet接口,

 比如查看结果集有几行几列,查看结果集的列名,查看结果集最后一行是否为空等等。

4、关于一些长字段的输入和输出问题,见代码。

for(;;);

mt = con.createStatement();
ResultSet r = stmt.executeQuery("SELECT x FROM Table2");
// 现在以 4K 块大小获取列 1 结果:
byte buff = new byte[4096];
while (r.next()) {
Java.io.InputStream fin = r.getAsciiStream(1);
for (;;) {
int size = fin.read(buff);
if (size == -1) { // 到达流末尾
break;
}
// 将新填充的缓冲区发送到 ASCII 输出流:
output.write(buff, 0, size);
}
}
java.io.File file = new java.io.File("/tmp/data");
int fileLength = file.length();
java.io.InputStream fin = new java.io.FileInputStream(file);
java.sql.PreparedStatement pstmt = con.prepareStatement(
"UPDATE Table5 SET stuff = ? WHERE index = 4");
pstmt.setBinaryStream (1, fin, fileLength);
pstmt.executeUpdate(); 

数据库针对长字段提供了三种流机制:

getBinaryStream
getAsciiStream
getUnicodeStream

其中for(;;)是无限循环的意思..

时间: 2024-07-30 20:29:05

mysql JDBC总结的相关文章

java链接MySQL数据库时使用com.mysql.jdbc.Connection的包会出红线问题

package com.swift; //这里导入的包是java.sql.Connection而不是com.mysql.jdbc.Connection import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class TestJDBC { public static void main(String[] args) { try { Class.forName(

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxError Exception

1.错误描述 com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxError Exception:You have an error in your SQL syntax check the manual that corresponds to your MySQL server version for the right syntax to use near 'notnull,user_name varchar(255) )' at line 1 2.错误原因

com.mysql.jdbc.PacketTooBigException: Packet for query is too large (1169 &gt; 1024)

### Cause: com.mysql.jdbc.PacketTooBigException: Packet for query is too large (1169 > 1024). You can change this value on the server by setting the max_allowed_packet' variable. ; SQL []; Packet for query is too large (1169 > 1024). You can change

WEB中的java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

必须把mysql-connector-java-5.1.7-bin.jar导入到tomcat的lib目录下面! 在java项目中,只需要引入mysql-connector-java-5.1.7-bin.jar就可以运行java项目. 在web项目中,当Class.forName("com.mysql.jdbc.Driver");时eclipse是不会去查找字符串,不会去查找驱动的.所以只需要把mysql-connector-java-5.1.7-bin.jar拷贝到tomcat下lib

开发中出现的异常com.mysql.jdbc.CommunicationsException

web开发遇到的异常: com.mysql.jdbc.CommunicationsException:The last packet successfully received from the server was58129 seconds ago.Thelast packet sent successfully to the server was 58129 seconds ago, which islonger than the server configured value of 'wa

错误:“Cannot load JDBC driver class &#39;com.mysql.jdbc.Driver”的解决方法

"Cannot load JDBC driver class 'com.mysql.jdbc.Driver " 表示没有JDBC连接MySql的驱动包,因此需要手动添加驱动包到WEB-INF目录下的lib目录中. 解决方法: 从网上下载mysql-connector-java.jar,将其放到"D:\workspace\my-web\src\main\webapp\WEB-INF\lib"目录下,即可解决上述问题. 错误:"Cannot load JDBC

ClassNotFoundExceptioncom.mysql.jdbc.Driver

调试3M网站项目时出现错误提示:ClassNotFoundExceptioncom.mysql.jdbc.Driver 原因分析:项目中缺少mysql-connector-java-5.1.22-bin.jar包 解决办法: ①右键工程名->New->Folder,新建文件夹lib,右键lib文件夹->Import导入mysql-connector-java-5.1.22-bin.jar ②选中jar包右击--->BuildPath--->Add To Build Path,

mysql jdbc的使用

先创建一个库petdb,  再创建一个表pettable,在里面加入数据.使用jdbc读出. import java.sql.*; /** * Created by chuiyuan on 2/6/16. */ public class mysql { /** * JDBC driver name and database URL */ static final String DB_NAME="petdb"; static final String TABLE_NAME="p

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL

1.错误描述 org.hibernate.exception.SQLGrammarException: error executing work at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:80) at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(

MySql &amp; JDBC

1.什么是数据库? 数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以通过SQL对数据库中的数据进行增加.修改.删除.及查询操作. 数据库系统类型(历史发展): 网状型数据库 层次型数据库 关系数据库 ---理论最成熟.应用最广泛 面向对象数据库 常见的数据库(软件): MYSQL Oracle DB2 SQLServer SyBase SQLite Java相关: MYSQL  Oracle 2.数据库和表 数据表示存储数据的逻辑单元,可以把数据表想象成