【问题标题】:How to use the Replace() function of Access with executeUpdate command in Java?如何在 Java 中通过 executeUpdate 命令使用 Access 的 Replace() 函数?
【发布时间】:2014-01-24 12:08:54
【问题描述】:

我用下面的代码在executeUpdate方法中用另一个字符串替换了一个字符串。代码是:

                  try
                  {
                   Connection cn=null;Statement st=null;
                  Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
                  String constring="jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=D:sandeep\\copy of abcdef.mdb;";
                  cn=DriverManager.getConnection(constring, "", ""); 
                  st=cn.createStatement();
                  String sql="UPDATE temp SET mobile = Replace(mobile, '-', '')";
                  st.executeUpdate(sql.toString());
                  }
                 catch(Exception ex){System.out.println(ex);
                  }

例外是:

java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] 表达式中未定义函数“替换”。

【问题讨论】:

  • 该 SQL 是否手动运行?我认为您必须创建一个 CallableStatement?

标签: java sql ms-access


【解决方案1】:

Driver={Microsoft Access Driver (*.mdb)}; 使用较旧的“Jet”数据库驱动程序,当使用该驱动程序时,Replace() 函数不可用于从 Access 应用程序本身外部执行的查询。换句话说,如果从 Access 内 执行该查询将起作用,但从 Java 应用程序等外部程序执行时它将不起作用。

如果您确实需要使用Replace() 功能,您可以尝试安装较新的Access Database Engine(又名“ACE”)的32 位版本。较新版本的驱动程序允许Replace()(和其他功能)在旧驱动程序没有的地方使用。

我刚刚使用较新的“ACE”驱动程序对此进行了测试,以下代码适用于我。

注意驱动名称略有不同:{Microsoft Access Driver (*.mdb, *.accdb)}

import java.sql.*;

public class JDBCQuery {

    public static void main(String args[]) {
        Connection con = null;
        Statement st = null;
        try {
            String connectionString = null;
            connectionString = 
                    "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};" + 
                    "DBQ=C:\\__tmp\\myDb.mdb;";
            con = DriverManager.getConnection(connectionString);

            st = con.createStatement();
            String sql = "UPDATE temp SET mobile = Replace(mobile, '-', '')";
            st = con.createStatement();
            st.execute(sql);
        } catch( Exception e ) {
            e.printStackTrace();
        } finally {
            try {
                if (ps != null) {
                    ps.close();
                }
                if (con != null) {
                    con.close();
                }
            } catch( Exception e ) {
                e.printStackTrace();
            }
        }
    }
}

【讨论】:

    【解决方案2】:

    我认为只有这一行的问题

    替换

    String constring="jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=D:sandeep\\copy of abcdef.mdb;";
    

    由

    String dbFileName="D:/sandeep/copy of abcdef.mdb";
    String constring="jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};"+
                            "DBQ="+dbFileName+";";
    

    【讨论】:

      猜你喜欢
      • 2019-01-26
      • 1970-01-01
      • 2016-07-02
      • 1970-01-01
      • 1970-01-01
      • 2013-08-18
      • 2013-09-11
      • 2014-04-22
      • 2014-03-22
      相关资源
      最近更新 更多