博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA 访问数据库问题
阅读量:4172 次
发布时间:2019-05-26

本文共 3740 字,大约阅读时间需要 12 分钟。

市面上数据库种类繁多,JAVA访问的方式也有所不同。
1、利用数据源
在本地建一个数据源,指向远程或是本地的数据库,这种方法比较方便,适用于各种数据库,SQL Server,Access等,使用方法如下:开始 - 控制面板 - 管理工具 - 数据源 - 系统 DSN(Data source Name)- 添加 - 选 SQL Server - 填入名称(这里写上mydatabase),选择相应的服务器,后续按提示操作即可。
Java代码
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
public class TestDSN {
public static void main(String[] args) {
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con = DriverManager.getConnection(
"jdbc:odbc:mydatabase", "sa", "pa");
String sql = "SELECT * From id_mac_rssi";
ResultSet rs = con.createStatement().executeQuery(sql);
while (rs.next()) {
System.out.println("id:" + rs.getString(1) + " mac:"
+ rs.getString(2) + " rssi:" + rs.getString(3));
}
rs.close();
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
public class TestDSN {
public static void main(String[] args) {
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con = DriverManager.getConnection(
"jdbc:odbc:mydatabase", "sa", "pa");
String sql = "SELECT * From id_mac_rssi";
ResultSet rs = con.createStatement().executeQuery(sql);
while (rs.next()) {
System.out.println("id:" + rs.getString(1) + " mac:"
+ rs.getString(2) + " rssi:" + rs.getString(3));
}
rs.close();
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
这种方式相当于把连接数据库的工作交给“数据源”,JAVA 只和“数据源”打交道。优点是通用性好,不需要改变JAVA代码,而且可以访问 Access 这样的没有进程守护的数据库文件,JAVA标准库里包含了相关的库,不需额外添加。缺点是要手动设置或者代码实现添加数据源,一般来说用户希望得到软件后直接就可以用,而不希望做过多的设置。
2、直接访问远程数据库
这种方式要求远程数据库有进程守护,Oracle,SQL Server,MySql都没问题,但是Access 就不行,它只是一个文件而已。
访问 SQL Server 方式:
SQL Server 的访问并不轻松,需要下载支持的包,版本不同,支持的包也有差异。这里使用 SQL Server 2005 ,添加用户 leidiqiu ,密码 888888。到微软的网站下载支持的包 sqljdbc.jar 和 sqljdbc4.jar 并添加到环境变量。
Java代码
package com.ldq;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
public class Test04 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
String sql = "INSERT INTO img(c_id,c_img) VALUES(?,?)";
Connection con = DriverManager
.getConnection("jdbc:sqlserver://127.0.0.1:1433;databasename=mydatabase;user=leidiqiu;password=888888");
PreparedStatement ps = con.prepareStatement(sql);
FileInputStream fis = new FileInputStream("img.png");
ps.setInt(1, 1003);// 对应第一个 ? 号
ps.setBinaryStream(2, fis, fis.available());// 对应第二个 ? 号
int rst = ps.executeUpdate();
System.out.println(rst);// 数据是否插入成功
fis.close();
ps.close();
con.close();
} catch (Exception e) {
e.printStackTrace();
// TODO: handle exception
}
}
}
package com.ldq;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
public class Test04 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
String sql = "INSERT INTO img(c_id,c_img) VALUES(?,?)";
Connection con = DriverManager
.getConnection("jdbc:sqlserver://127.0.0.1:1433;databasename=mydatabase;user=leidiqiu;password=888888");
PreparedStatement ps = con.prepareStatement(sql);
FileInputStream fis = new FileInputStream("img.png");
ps.setInt(1, 1003);// 对应第一个 ? 号
ps.setBinaryStream(2, fis, fis.available());// 对应第二个 ? 号
int rst = ps.executeUpdate();
System.out.println(rst);// 数据是否插入成功
fis.close();
ps.close();
con.close();
} catch (Exception e) {
e.printStackTrace();
// TODO: handle exception
}
}
}
img.png 文件放在工程目录下,数据库表的设计为 c_id int,c_img img ,img的数据类型其实就是字节流存储的图片,在用 SELECT * FROM img 查看 img 部分是16进制的内容,和用 WinHex 打开 img.png 的内容一致。0x424D36.....

转载地址:http://xgbai.baihongyu.com/

你可能感兴趣的文章
(四)Thread.join的作用和原理
查看>>
(五)Synchronized原理分析
查看>>
基于redis分布式锁实现“秒杀”
查看>>
分布式理论:深入浅出Paxos算法
查看>>
Java高级架构2018年好文清单
查看>>
【jvm】Java垃圾回收
查看>>
Spring 面试问题 TOP 50
查看>>
拼多多Java后端团队面试题:epoll+集群+事务隔离+Kafka+分布式等
查看>>
最全BAT算法面试130题:阿里、百度、腾讯、京东、美团、今日头条
查看>>
想进阿里P7,你必须掌握这些技能专题
查看>>
看完你还敢说你懂JVM吗?
查看>>
面试了一个2年程序员,竟然只会curd,网友神回复!
查看>>
ElasticSearch基础分布式架构讲解
查看>>
年底了,程序员来说说你今年写过的最牛逼的bug是什么?
查看>>
阿里P8架构师讲述:3—5年程序员的发展和出路在哪里?
查看>>
题库分库分表架构方案
查看>>
一篇文读懂缓存在大型分布式系统中的最佳应用
查看>>
当亲戚问你工资,程序猿如何作答,简直不能再机智
查看>>
Redis从单机到集群,一步步教你环境部署以及使用
查看>>
电商平台备战促销季的运维秘诀——高可用服务层
查看>>