Google cloud platform 如何从java应用程序中对google扳手执行DML(更新、插入、删除)操作?

Google cloud platform 如何从java应用程序中对google扳手执行DML(更新、插入、删除)操作?,google-cloud-platform,google-cloud-spanner,Google Cloud Platform,Google Cloud Spanner,需要你的帮助 我试图使用一个驱动程序类(com.simba.cloudspan.core.jdbc42.cloudspan.42driver)执行DML操作,但我遇到了如下异常 "Caused by: shaded.com.google.cloud.spanner.SpannerException: INVALID_ARGUMENT: DML statements(INSERT, UPDATE and DELETE) are not supported." 但是SELECT查询工作正常。下面

需要你的帮助

我试图使用一个驱动程序类(com.simba.cloudspan.core.jdbc42.cloudspan.42driver)执行DML操作,但我遇到了如下异常

"Caused by: shaded.com.google.cloud.spanner.SpannerException: INVALID_ARGUMENT: DML statements(INSERT, UPDATE and DELETE) are not supported." 
但是SELECT查询工作正常。下面是我的java代码

请让我知道如何从java应用程序对扳手执行DML操作

我尝试了
Mutation.newInsertBuilder
Mutation.newUpdateBuilder
Mutation.delete
,使用
com.google.cloud.panner.Mutation实现DML操作;库
但是我实际上在寻找某种实现,用户可以在其中运行SQL语句来执行DML操作

public class SimbuDriverInsert {

   static final  String CONNECTION_URL = "jdbc:cloudspanner://localhost;Project=optimistic-leaf-197820;Instance=testspanner01;Database=students;PvtKeyPath=C:\\MuleWorkspace\\test-driver\\src\\main\\resources\\gcloudPrivateKey.json";

   public static void main(String[] args) {
   Connection conn = null;
   Statement stmt = null;
   try{
      Class.forName("com.simba.cloudspanner.core.jdbc42.CloudSpanner42Driver");
      System.out.println("Connecting to database...");
      conn = DriverManager.getConnection(CONNECTION_URL);
      stmt = conn.createStatement();


      String sql = "INSERT INTO studentdetails (id,age,name) " +
              "VALUES (100, 30, 'Ali')";
       stmt.executeUpdate(sql);
       System.out.println("Inserted record into the table...");
      stmt.close();
      conn.close();
   }catch(SQLException se){
      //Handle errors for JDBC
      se.printStackTrace();
   }catch(Exception e){
      //Handle errors for Class.forName
      e.printStackTrace();
   }
}//end main

}

Oracle(以及Simba)提供的官方JDBC驱动程序不支持DML和DDL语句。如果在项目中包含此驱动程序并更改以下行

Class.forName(“com.simba.cloudspan.core.jdbc42.cloudspan.42driver”)

进入

Class.forName(“nl.topicus.jdbc.CloudSpanerDriver”)

代码应该是有效的。驱动程序使用与官方驱动程序相同的URL语法,但也添加了一些额外的可能性。有关更多信息,请参阅驱动程序的

可以将驱动程序添加为maven依赖项或


在这里查看更多关于如何使用驱动程序的示例:使用不同的框架和工具。

你好,克努特·奥拉夫·洛伊特,很高兴收到您的回复:)我尝试了Class.forName(“nl.topicus.jdbc.cloudspan”);也但我在nl.topicus.jdbc.statement.CloudSpanrStatement.executeUpdate(CloudSpanrStatement.java:579)中得到了以下异常::java.sql.SQLFeatureNotSupportedException。而且,我的查询非常简单,比如“updatestudentdetails SET age=99,name='Alibaba'WHERE id=100”,看起来您正在调用语句#executeUpdate(字符串sql,int autoGeneratedKeys);而不是语句#executeUpdate(字符串sql);。前者不受支持,因为谷歌云扳手不支持任何自动生成的密钥。如果仅使用SQL字符串调用executeUpdate,则不应出现此错误。