网络数据库程序设计就是利用网络共享(或操作)远程服务器数据库中的数据,从而实现基于网络数据库的互联网络应用。
数据库一般位于异地的服务器上,客户端应用程序用JAVA语言书写。数据库和JAVA开发环境的关系如图1所示。
图1 JAVA与数据库
Java语言要操作数据库,其中间需要“JDBC API”和“JDBC实现”2个必须的中间件。
(1) “JDBC API”提供3个常见的类:
l 连接类,Connection;
l 执行类,Statement;
l 结果类,ResultSet。
(2) “JDBC实现”提供2个接口:
l 驱动管理接口,DriverManager;
l 驱动接口,Driver。
提前工作:
下载com.mysql.jdbc_5.1.5包,并将包添加到项目库中。
程序设计第一步:程序操作数据库
(1)建议程序包名:database,程序命名为:DBOperate1.java,主要功能是在数据库插入一些记录,并实现浏览数据库。
(2)程序DBOperate1.java要点包括:
(2.1)第一步 运用JDBC实现,为程序加载SQL数据库驱动:
//加载MySQL驱动器,其中com.mysql.jdbc.Driver包含在com.mysql.jdbc_5.1.5.jar中。
Class jdbcDriver=Class.forName("com.mysql.jdbc.Driver");
//注册MySQL驱动器
java.sql.DriverManager.registerDriver((Driver)jdbcDriver.newInstance());
第二步使用JDBC API取得数据库联接权和执行权,并进行数据库相关操作:
指定数据库所在位置:
dbUrl ="jdbc:mysql://IP:3306/STUDENTDB";
//注意:其中的IP地址和端口先用自己机器的参数代替。
给出允许访问数据库的用户名和密码:
dbUser=“******”;
dbPwd=“******”;
创建数据库连接对象:
Connectio con = java.sql.DriverManager.getConnection(dbUrl,dbUser,dbPwd);
创建数据库执行对象:
Statement stmt = con.createStatement();
中文乱码问题:
从源头上解决这个问题。那就是修改mysql默认的配置文件,把它的字符集修改成能够使用中文字符的UTF8就OK了.
修改mysql配置文件my.cnf 或my.ini。
[mysqld]
character-set-server=utf8
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
请注意这几个参数配置的位置,不然可能会启动不起来mysql服务:
my.ini在programData (隐藏的)下的MYSQL下
改后会发现数据插不进去:
这里有老师提供的方法:
具体代码:
package Chapter11_1;
import com.mysql.jdbc.Field;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.Driver;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
public class DBTest {
public static void main(String args[])
throws SQLException, ClassNotFoundException
{
Connection con = null;
try
{
// Load the JDBC driver
Class jdbcDriver = Class.forName("com.mysql.jdbc.Driver");
System.out.println("Driver loaded");
//注册MYSQL驱动器
java.sql.DriverManager.registerDriver((Driver)jdbcDriver.newInstance());
String dbUrl = "jdbc:mysql://202.116.195.22:9999/STUDENTDB1";//?useUnicode=true&characterEncoding=GB2312";
String dbUser = "";
String dbPwd = "";
con = java.sql.DriverManager.getConnection(dbUrl,dbUser,dbPwd);
System.out.println("连接数据库成功");
//探测数据库中的表名
DatabaseMetaData dbMetaData = con.getMetaData();
ResultSet rsTables = dbMetaData.getTables(null, null, null,
new String[] {"TABLE"});
System.out.print("User tables: ");
while (rsTables.next())
{
System.out.print(rsTables.getString("TABLE_NAME") + " ");
}
System.out.println();
//创建数据库执行对象
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("select * from students");
ResultSetMetaData fields = rs.getMetaData();//会返回该表的字段信息
int n = fields.getColumnCount();
System.out.println("n is: " + n);
for(int i=1;i<=n;i++)
{
System.out.print(" " + fields.getColumnLabel(i));
}
System.out.println();
String sql = "insert into STUDENTS(NO,NAME,AGE,CLASS,IP)"
+ " values('20180000121','李四',23, 'network engineering','172.16.230.25')";
// String sql = "delete from Students";
stmt.execute(sql);
// stmt.execute(sql);
rs = stmt.executeQuery("select NO,NAME,AGE,CLASS from STUDENTS");
while(rs.next())
{
String ssName = rs.getString(2);
System.out.println(ssName);
}
con.close();
}catch(Exception e)
{
e.printStackTrace();
}finally
{
if((con!=null) && (!con.isClosed()))
{
con.close();
}
}
}
}