java连数据库 说一下用的多的 jdbc吧
首先注册jdbc和相关数据库的驱动比如oracle数据库
ClassforName("oraclejdbcOracleDiver");
创建连接
对应数据库的url
url = "jbbc:oracle;thin:@localhot:1521:ora9i" ora9i是数据库的sid
Connection conn = DriverMangergetConnection(url,username,pwd);
然后创建发射源 也就是通过发射源 向数据库传递sql语句
Statement stmt = conncreateStatement();
sql = "SELECT FROM student";
ResultSet rs = stmtexecutQurey(sql); //把查询的结果放在一个记录集中
如果获取相应记录的字段值
rsnext();//记录集的指针指向第一条上方获取第一条必须下移
比如说 student表中有一个name字段
获取它的值是这样的
rsgetString("name");其中的参数为要获取字段的字段名
最后不要忘了关闭连接
close()
Java中有个元数据,交MetaData,这个是记录数据库和表本身信息的信息,
ResultSet rs=stexecuteQuery("select from student2");
//获取结果集元数据
ResultSetMetaData rsmd=rsgetMetaData();
//总列数
int size=rsmdgetColumnCount();
//打印列名
for(int i=1;i<=size;i++)
{Systemoutprint(rsmdgetColumnName(i)+"\t");
}
Systemoutprintln();
//打印列在数据库中的类型
for(int i=1;i<=size;i++)
{
Systemoutprint(rsmdgetColumnTypeName(i)+"\t");
}
Systemoutprintln();
//打印列的类型大小
for(int i=1;i<=size;i++)
{
Systemoutprint(rsmdgetColumnDisplaySize(i)+"\t");
}
Systemoutprintln();
//别名
for(int i=1;i<=size;i++)
{
Systemoutprint(rsmdgetColumnLabel(i)+"\t");
}
Systemoutprintln();
//打印结果集中数据
while(rsnext())
{
for(int i=1;i<=size;i++)
{
Systemoutprint(rsgetString(i)+"\t");
}
Systemoutprintln();
}
希望对你有用
Java获取数据库的表中各字段的字段名,代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
import javasqlConnection;
import javasqlDriverManager;
import javasqlResultSet;
import javasqlPreparedStatement;
import javasqlResultSetMetaData;
import javasqlSQLException;
public class TestDemo {
public static Connection getConnection() {
Connection conn = null;
try {
ClassforName("commysqljdbcDriver");
String url = "jdbc:mysql://数据库IP地址:3306/数据库名称";
String user = "数据库用户名";
String pass = "数据库用户密码";
conn = DriverManagergetConnection(url, user, pass);
} catch (ClassNotFoundException e) {
eprintStackTrace();
} catch (SQLException e) {
eprintStackTrace();
}
return conn;
}
public static void main(String[] args) {
Connection conn = getConnection();
String sql = "select from AccessType";
PreparedStatement stmt;
try {
stmt = connprepareStatement(sql);
ResultSet rs = stmtexecuteQuery(sql);
ResultSetMetaData data = rsgetMetaData();
for (int i = 1; i <= datagetColumnCount(); i++) {
// 获得所有列的数目及实际列数
int columnCount = datagetColumnCount();
// 获得指定列的列名
String columnName = datagetColumnName(i);
// 获得指定列的列值
int columnType = datagetColumnType(i);
// 获得指定列的数据类型名
String columnTypeName = datagetColumnTypeName(i);
// 所在的Catalog名字
String catalogName = datagetCatalogName(i);
// 对应数据类型的类
String columnClassName = datagetColumnClassName(i);
// 在数据库中类型的最大字符个数
int columnDisplaySize = datagetColumnDisplaySize(i);
// 默认的列的标题
String columnLabel = datagetColumnLabel(i);
// 获得列的模式
String schemaName = datagetSchemaName(i);
// 某列类型的精确度(类型的长度)
int precision = datagetPrecision(i);
// 小数点后的位数
int scale = datagetScale(i);
// 获取某列对应的表名
String tableName = datagetTableName(i);
// 是否自动递增
boolean isAutoInctement = dataisAutoIncrement(i);
// 在数据库中是否为货币型
boolean isCurrency = dataisCurrency(i);
// 是否为空
int isNullable = dataisNullable(i);
// 是否为只读
boolean isReadOnly = dataisReadOnly(i);
// 能否出现在where中
boolean isSearchable = dataisSearchable(i);
Systemoutprintln(columnCount);
Systemoutprintln("获得列" + i + "的字段名称:" + columnName);
Systemoutprintln("获得列" + i + "的类型,返回SqlType中的编号:"+ columnType);
Systemoutprintln("获得列" + i + "的数据类型名:" + columnTypeName);
Systemoutprintln("获得列" + i + "所在的Catalog名字:"+ catalogName);
Systemoutprintln("获得列" + i + "对应数据类型的类:"+ columnClassName);
Systemoutprintln("获得列" + i + "在数据库中类型的最大字符个数:"+ columnDisplaySize);
Systemoutprintln("获得列" + i + "的默认的列的标题:" + columnLabel);
Systemoutprintln("获得列" + i + "的模式:" + schemaName);
Systemoutprintln("获得列" + i + "类型的精确度(类型的长度):" + precision);
Systemoutprintln("获得列" + i + "小数点后的位数:" + scale);
Systemoutprintln("获得列" + i + "对应的表名:" + tableName);
Systemoutprintln("获得列" + i + "是否自动递增:" + isAutoInctement);
Systemoutprintln("获得列" + i + "在数据库中是否为货币型:" + isCurrency);
Systemoutprintln("获得列" + i + "是否为空:" + isNullable);
Systemoutprintln("获得列" + i + "是否为只读:" + isReadOnly);
Systemoutprintln("获得列" + i + "能否出现在where中:"+ isSearchable);
}
} catch (SQLException e) {
eprintStackTrace();
}
}
}
在Java中,可以这样判断一个字符串是否超过数据库字段的长度限制:
// 数据库中字段的长度限制
int maxLength = 64;
// 待校验的字符串
String str = "0123456789012345678901234567890123456789";
// 获取字符串的长度
int strLength = strlength();
// 判断字符串长度是否超过限制
if (strLength > maxLength) {
// 超过长度限制,输出提示
Systemoutprintln("字符串长度超出限制!");
} else {
// 没超过长度限制,可以进行数据库 *** 作
saveToDatabase(str);
}
这里我们首先定义了数据库字段的最大长度限制maxLength,比如这里是64。
然后我们获取待校验字符串str的长度strLength,使用strlength()方法。
最后通过比较strLength和maxLength,就可以判断字符串长度是否超标,如果超过就提示错误,否则可以进行数据库写入 *** 作。
这是判断字符串长度超过数据库字段限制的基本Java代码实现。我们还可以根据需要作些改进:
1 maxLength可以从数据库配置中读取,而不是硬编码在代码中。
2 可以定制化错误提示信息,给出数据库名称、字段名称等更加友好的提示。
3 可以将字符串截断到最大长度,而不是直接报错。这需要使用strsubstring(0, maxLength)截取前maxLength个字符。
4 可以将验证长度的逻辑封装到一个公共方法中,方便多处调用。
这些都是可以进一步优化和改进的点。但基本原理是获取字符串长度和数据库限制长度进行比较,这点不会变。
看了一下你的代码:
1你用的oracle数据库,里面不应该用char型,应该用varchar2型
2你的sql语句错误,
insert
into
基本表
(职工编号,姓名,性别,职称,职务,部门,出生日期,籍贯,身份z,合同期限,参加工作时间)
values
(,,,,,,,,,,)
是values不是value
然后其他我还没看出什么错误
你改一下看可以不,还是不行你把错误代码给我看一下。
然后两点建议:连接数据库的类分开写,然后数据库里面最好不要用中文
Java可以使用JDBC访问数据库,也可以使用各类ORM框架访问数据库,但这些框架最终还是通过JDBC访问数据库,它们只是封装了数据库 *** 作,而使得开发者可以减少这部分消耗。因此,本文只讲解JDBC访问方式。
JDBC访问一般分为如下流程:
1、加载JDBC驱动程序:
在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机),这通过javalangClass类的静态方法forName(StringclassName)实现。
例如:
try{
//加载MySql的驱动类
ClassforName("commysqljdbcDriver");
}catch(e){
Systemoutprintln("找不到驱动程序类,加载驱动失败!");
e();
}
成功加载后,会将Driver类的实例注册到类中。
2、提供JDBC连接的URL
连接URL定义了连接数据库时的协议、子协议、数据源标识。
书写形式:协议:子协议:数据源标识
协议:在JDBC中总是以jdbc开始
子协议:是桥连接的驱动程序或是数据库管理系统名称。
数据源标识:标记找到数据库来源的地址与连接端口。
例如:(MySql的连接URL)
jdbc:mysql://localhost:3306/testuseUnicode=true&=gbk;
useUnicode=true:表示使用Unicode字符集。如果设置为
gb2312或GBK,本参数必须设置为true。=gbk:字符编码方式。
3、创建数据库的连接
要连接数据库,需要向javasql请求并获得Connection对象,该对象就代表一个数据库的连接。
使用的(Stringurl,Stringusername,Stringpassword)方法传入指定的欲连接的数据库的路径、数据库的用户名和密码来获得。
例如:
//连接MySql数据库,用户名和密码都是root
Stringurl="jdbc:mysql://localhost:3306/test";
Stringusername="root";
Stringpassword="root";
try{
Connectioncon=
(url,username,password);
}catch(se){
Systemoutprintln("数据库连接失败!");
se();
}
4、创建一个Statement
要执行SQL语句,必须获得javasqlStatement实例,Statement实例分为以下3种类型:
1、执行静态SQL语句。通常通过Statement实例实现。
2、执行动态SQL语句。通常通过实例实现。
3、执行数据库存储过程。通常通过实例实现。
具体的实现方式:
Statementstmt=con();
PreparedStatementpstmt=conprepareStatement(sql);
CallableStatementcstmt=conprepareCall("{CALLdemoSp(,)}");
5、执行SQL语句
Statement接口提供了三种执行SQL语句的方法:executeQuery、executeUpdate和execute
1、ResultSetexecuteQuery(StringsqlString):执行查询数据库的SQL语句,返回一个结果集(ResultSet)对象。
2、intexecuteUpdate(StringsqlString):用于执行INSERT、UPDATE或DELETE语句以及SQLDDL语句,如:CREATETABLE和DROPTABLE等
3、execute(sqlString):用于执行返回多个结果集、多个更新计数或二者组合的语句。
具体实现的代码:
ResultSetrs=stmtexecuteQuery("SELECTFROM");
introws=stmtexecuteUpdate("INSERTINTO");
booleanflag=stmtexecute(Stringsql);
6、处理结果
两种情况:
1、执行更新返回的是本次 *** 作影响到的记录数。
2、执行查询返回的结果是一个ResultSet对象。
ResultSet包含符合SQL语句中条件的所有行,并且它通过一套get方法提供了对这些行中数据的访问。
使用结果集(ResultSet)对象的访问方法获取数据:
while(rsnext()){
Stringname=rsgetString("name");
Stringpass=rsgetString(1);//此方法比较高效(列是从左到右编号的,并且从列1开始)
}
7、关闭JDBC对象
*** 作完成以后要把所有使用的JDBC对象全都关闭,以释放JDBC资源,关闭顺序和声明顺序相反:
1、关闭记录集
2、关闭声明
3、关闭连接对象
if(rs!=null){//关闭记录集
try{
rsclose();
}catch(SQLExceptione){
eprintStackTrace();
}
}
if(stmt!=null){//关闭声明
try{
stmtclose();
}catch(SQLExceptione){
eprintStackTrace();
}
}
if(conn!=null){//关闭连接对象
try{
connclose();
}catch(SQLExceptione){
eprintStackTrace();
}
}
以上就是关于JAVA *** 作数据库全部的内容,包括:JAVA *** 作数据库、在java连接数据库中,如何获取查询的列数或者是列名数组、java怎样读取数据库表中字段的数据类型等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)