我想从我的Java项目中操作Microsoft Access数据库(.accdb或.mdb文件).我不想使用Microsoft的JDBC-ODBC Bridge和Access ODBC驱动程序,因为:
我看到其他答案提到了名为UCanAccess的 Access数据库的JDBC驱动程序.如何设置我的Java项目以使用此方法?
(回答建议使用Java的Access数据库的更好方法也是最受欢迎的.)
使用jdbc:ucanaccess方法将一个applet连接到Access DB时,出现以下错误:
Firstdb.java:44: error: unreported exception SQLException;
must be caught or declared to be thrown
stmt.executeUpdate(sql);
^
Run Code Online (Sandbox Code Playgroud)
我用于applet的代码如下(add()并setBounds()从中删除init()):
public class Firstdb extends Applet implements ActionListener {
TextField t1, t2;
Label l1;
Button b1, b2;
Connection con;
Statement stmt;
public void init() {
try {
con = DriverManager.getConnection("jdbc:ucanaccess://H:/test/db.mdb");
stmt = con.createStatement();
} catch (Exception e) {
}
}
public void actionPerformed(ActionEvent ae) {
String sql;
if (ae.getSource() == b1) {
sql = "insert into user …Run Code Online (Sandbox Code Playgroud) 我有这张桌子
我正在使用以下代码从我的表中检索数据,该数据返回其库尔德语单词包含的所有英语单词بةرز
targetText="????";
try (PreparedStatement ps = conn.prepareStatement(
"SELECT English,Kurdish FROM Info " +
"WHERE Kurdish = ? " +
"OR REGEXP_MATCHES(Kurdish, ?) " +
"OR REGEXP_MATCHES(Kurdish, ?) " +
"OR REGEXP_MATCHES(Kurdish, ?) ")) {
ps.setString(1, targetText);
ps.setString(2, "^[. ]*" + targetText+ "[ ]*[:?,]+[ .]*$");
ps.setString(3, "^[. ]*[:?,]+[ ]*" + targetText+ "[. ]*$");
ps.setString(4, "^[. ]*[:?,]+[ ]*" + targetText+ "[ ]*[:?,]+[ .]*$");
try (ResultSet rSet = ps.executeQuery()) {
while (rSet.next()) {
System.out.println(rSet.getString("English"));
System.out.println(rSet.getString("Kurdish"));
}
}
}
Run Code Online (Sandbox Code Playgroud)
所以它工作正常,它打印我想要的所有英语单词.
我的问题是,当我得到相应的库尔德语单词时,它不会打印完整的单元格.它只是打印بةرز,
例如,前面代码的输出应该是:
aesthete …Run Code Online (Sandbox Code Playgroud) 在Java中使用UCanAccess驱动程序时,我发现将日期输出为特定格式非常困难.目前,我正在使用PreparedStatement.setDate()方法,该方法要求日期格式为[yyyy-MM-dd HH:mm:ss].当用户打开文件时,结果输出也采用这种格式.
编辑* - 我没有使用带有格式化日期的setDate()方法,此方法只接受没有格式化的Java Date对象.我打算写的是我在处理格式化日期时使用setString()方法,但UCanAccess要求此日期字符串格式为[yyyy-MM-dd HH:mm:ss].我真的只是想弄清楚如何在调用setString()之后将其提供给不同的格式或更改格式.
到目前为止一切都很好,但现在我需要提供各种格式的日期文件,如[MM-dd].我可以通过使生成的Access字段键入备注或文本来完成此操作,但问题变为当我需要日期为该格式并且仍然将生成的Access字段类型设置为日期/时间.
我注意到在UCanAccess首页上,它提到支持访问日期格式,但我在几次谷歌搜索后没有找到任何示例.任何人都知道如何使用此驱动程序格式化日期,同时保持正确的日期/时间类型?
提前致谢!
我想通过NetBeans使用UCanAccess对Access表进行一些小改动,但我遇到了问题
pst.executeUpdate();
Run Code Online (Sandbox Code Playgroud)
数据库细节:
database name : duruBistro.accdb
table name : person
field names: tc_no (text)
name (text)
surname (text)
salary (number)
Run Code Online (Sandbox Code Playgroud)
码:
Connection conn = DriverManager.getConnection("jdbc:ucanaccess://C:\\Users\\ysnndr \\Documents\\accessDB\\duruBistro.accdb");
String query = "UPDATE PERSON SET SALARY = ? WHERE TC_NO = '189'";
PreparedStatement pst = conn.prepareStatement(query);
pst.setInt(1, 2500);
pst.executeUpdate();
Run Code Online (Sandbox Code Playgroud)
例外:
run:
java.lang.IllegalArgumentException: Given index Index@53f65459[
name: (PERSON) PrimaryKey
number: 0
isPrimaryKey: true
isForeignKey: false
data: IndexData@3b088d51[
dataNumber: 0
pageNumber: 317
isBackingPrimaryKey: true
isUnique: true
ignoreNulls: false
columns: [
ReadOnlyColumnDescriptor@1786dec2[
column: TextColumn@711f39f9[
name: …Run Code Online (Sandbox Code Playgroud) 我正在使用UCanAccess来操作Access数据库.在调用时executeUpdate我得到了异常:
net.ucanaccess.jdbc.UcanaccessSQLException:UCAExc ::: 3.0.2意外的页面类型1(Db = db.accdb; Table = MyTable; Index = PrimaryKey)
它只在尝试更新一个特定行时发生 - 我已经知道如何在Access DB中修复此问题.
问题在于Logger,在抛出此异常后我抓住了它,我记录了一条信息消息但未显示,所有下一条日志消息也未显示.
我想在不修复数据库的情况下修复它的原因是因为当它发生一次时,用户应该关闭应用程序以便记录下一个动作,如果他没有,那么我将无法知道他做了什么.
这是我的代码:
public static void main(String args[]) {
Logger logger = Logger.getLogger("myLogger");
PreparedStatement pst = null;
try {
FileHandler fileHandler = new FileHandler("myLog.log", 0, 1, true);
// Set formatter to put the time, the message, and the exception if exists
fileHandler.setFormatter(new Formatter() {
@Override
public String format(LogRecord record) {
Throwable t = record.getThrown();
String stackTrace = "";
if (t != null) …Run Code Online (Sandbox Code Playgroud) 我将 JDBC 与 UCanAccess 一起使用,以便通过直接文件路径创建到 MS Access 文件的连接,以将特定表存储到 JSON 对象中。但是,我的代码行
conn = DriverManager.getConnection(s1+inFilePath, user, pass);
Run Code Online (Sandbox Code Playgroud)
其中 conn 是一个未初始化的 Connection 对象,创建连接会导致某种内存泄漏,最终导致超出 GC 开销限制。
有没有办法解决这个问题?我尝试更改堆大小但没有结果。
我开发了一个小游戏,其中用户输入的文本需要发布在 MS Access 数据库中。
它在 NetBeans 中一切正常,但是每当我从 JAR 文件(最终需要交给我的客户)访问它时,它都不会向数据库发布任何内容。事实上,它返回以下错误:
java.sql.SQLException: No suitable driver found for jdbc:ucanaccess://C:\Users\Paul\Desktop\Spelli\RispostiDB.mdb
Run Code Online (Sandbox Code Playgroud)
这是相关代码:
public void postAnsDB()
{
String tableName = "Form"+studentGroup +"_"+studentSurname+"_"+studentName+"";
answerModifier();
try{
String strurl="jdbc:ucanaccess://C:\\Users\\Paul\\Desktop\\Spelli\\RispostiDB.mdb";
Connection conn=DriverManager.getConnection(strurl, "", "");
Statement stmt=conn.createStatement();
//Post Student Details to DB
String post = "INSERT INTO "+tableName+"(ID, responses, Correct_Response, Valid_Invalid, Marks) VALUES ('"+ansID+"', '"+answer+"', '"+correct+"', '"+valid+"', '"+marks+"');";
stmt.executeUpdate(post);
}
catch(Exception e)
{
System.out.println("Exception found in postAnsDB: "+e);
}
}
Run Code Online (Sandbox Code Playgroud) 我正在努力让Squirrel SQL连接到MS Access数据库(只是一个普通的,没有密码):
我认为这应该是一个简单直接的过程,但是请告诉我如何使它工作。
我正在尝试使用 ResultSet (UCanAccess 支持)在 GUI 中填充组合框
package Vegan;
import java.sql.Connection;
import java.sql.DriverManager;
public class connectionString {
static Connection connection = null;
public static Connection getConnection()
{
try
{
connection = DriverManager.getConnection("jdbc:ucanaccess://C:/Mo//MyDatabase1.accdb");
System.out.println("---connection succesful---");
}
catch (Exception ex)
{
System.out.println("Connection Unsuccesful");
}
return connection;
}
Run Code Online (Sandbox Code Playgroud)
package Vegan;
import static java.nio.file.Files.list;
import static java.rmi.Naming.list;
import java.sql.*;
import java.util.ArrayList;
import static java.util.Collections.list;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JComboBox;
public class DB {
private static ResultSet rs = null;
private static PreparedStatement …Run Code Online (Sandbox Code Playgroud)