加载JDBC-数据库驱动程序
mysql-connector-java-5.1.28-bin.jar文件就是连接MySQL数据库的JDBC-数据库驱动程序。将该驱动程序复制到Tomcat服务器所使用的JDK的扩展目录中(即java_home环境变量指定的JDK),比如:D:\jdk1.7\jre\lib\ext
或复制到Tomcat服务器安装目录的
\common\lib文件夹中,比如:
D:\apache-tomcat-8.0.3\common\lib
Java查不出来可以用SQL的命令行查试试
加载MySQL的JDBC-数据库驱动程序代码如下:
try{
Class.forName("com.mysql.jdbc.Driver");
}
catch(Exception e){}
建立连接:
try{ String uri = "jdbc:mysql:// 192.168.100.1:3306/warehouse";
String user ="root";
String password ="99";
con = DriverManager.getConnection(uri,user,password);
}
catch(SQLException e){
System.out.println(e);
}
中文乱码
URI 是统一资源标识符,而 URL 是统一资源定位符。每个 URL 都是 URI,但不一定每个 URI 都是 URL。因为 URI 还包括一个子类,即统一资源名称 (URN)。URL是URI的一个特例,它包含了定位Web资源的足够信息
避免操作数据库出现中文乱码(细节见稍后的7.3.3),那么需要使用 Connection getConnection(String) 方法建立连接,连接代码是(假设用户是root,其密码是99):
String uri =
"jdbc:mysql://127.0.0.1/warehouse?"+
"user=root&password=99&characterEncoding=gb2312";
con = DriverManager.getConnection(uri);
数据库和表使用支持中文的字符编码
在创建数据库时指定数据库使用的字符编码:
create people CHARACTER SET gb2312
查询记录
JDBC和数据库表进行交互的主要方式是使用SQL语句
ResultSet rs=sql.executeQuery(“”);
ResultSet结果集一次只能看到一个数据行,使用next()方法走到下一数据行,获得一行数据后,ResultSet结果集可以使用getXxx方法获得字段值(列值),将位置索引(第一列使用1,第二列使用2等等)或列名传递给getXxx方法的参数即可
更新、添加与删除记录
Statement对象调用方法:
public int executeUpdate(String sqlStatement);
用结果集操作数据库中的表
ResultSet结果集对底层数据库表进行更新和插入操作(这些操作由系统自动转化为相应的SQL语句)
更新:
使用结果集更新数据库表中第n行记录中某列的值的步骤是:
1.结果集rs的游标移动到第n行
rs.absolute(n);
2.结果集将第n行的某列的列值更新
例如 更新列名是columnName的日期值是x指定的值:
updateDate(String columnName, Date x)
3.更新数据库中的表
最后,结果集调用updateRow()方法用结果集中的第n行更新数据库表中的第n行记录。
插入:
使用结果集向数据库表中插入(添加)一行记录步骤是:
1.结果集rs的游标移动到插入行
rs.moveToInsertRow();
2.更新插入行的列值
例如:
rs.updateString(1, "c002");
rs.updateString(2, "IBM iPad");
rs.updateDate(3,Date());
rs.updateDouble(4, 5356);
3. 插入记录
最后,结果集调用insertRow()方法用结果集中的插入行向数据库表中插入一行新记录。
预处理语句
PreparedStatement对象,该对象被习惯地称作预处理语句对象
Connection连接对象con调用prepareStatement(String sql)方法:
PreparedStatement pre=con.prepareStatement(String sql);
预处理语句设置通配符“?”的值的常用方法有:
void setDate(int parameterIndex,Date x)
void setDouble(int parameterIndex,double x)
void setFloat(int parameterIndex,float x)
在对SQL进行预处理时可以使用通配符“?”来代替字段的值。例如:
prepareStatement pre=
con.prepareStatement("SELECT * FROM product WHERE price < ? ");
事务
事务处理步骤如下:
1.连接对象使用setAutoCommit(boolean autoCommit)方法
将参数autoCommit取值为false来关闭自动提交模式:
con.setAutoCommit(false);
2.commit()方法
con调用commit()方法就是让事务中的SQL语句全部生效。
3.rollback()方法
只要事务中任何一个SQL语句没有生效,就抛出SQLException异常。在处理SQLException异常时,必须让con调用rollback()方法,其作用是撤消事务中成功执行过的SQL语句对数据库数据所做的更新、插入或删除操作.
分页显示记录
可以使用二维数组table存放表的记录,即用二维数组table中的行(一维数组table[i])存放一条记录。
假设table存放了m行记录,准备每页显示n行,那么,总页数的计算公式:
如果m除以n的余数大于0,总页数等于m除以n的商加1;
如果m除以n的余数等于0,总页数等于m除以n的商。
总页数=(m%n)==0?(m/n):(m/n+1);
如果准备显示第p页的内容,应当从tablel第
(p-1)*n
行开始,连续输出n行(最后一页可能不足n行)。