我正在开发 Android 应用程序,用于显示 SQLBASE 数据库中的数据。 我们无法传输带有特殊字符的文本:command
daten.Bezeichnung = rs.getString("bezeichnung1");
结果
daten.Bezeichnung
包含带有损坏字符的文本:
“Jetzt nachtr.geändert BT10”,而正确的文本是“Jetzt nachtr.geändert BT10”
节目:
try {
Class.forName("jdbc.gupta.sqlbase.SqlbaseDriver");
} catch (ClassNotFoundException e) {
Log.e(TAG, "ODBC driver load failed!");
}
// 1. tit_umbuchung lesen
String sql = "SELECT titel_nr, bezeichnung1, isbn, loesch_datum "
+ "FROM sysadm.titel "
+ "WHERE mandant = "+config.CONFIG_MANDANT+" and ( isbn = '"+ barcode +"' or ean_nr = '"+barcode+"' or titel_nr like '"+barcode+"')";
try (Connection conn = DriverManager.getConnection(config.getConnectionURL(), config.CONFIG_USER, config.CONFIG_PASSWORD);
PreparedStatement ps = conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery()) {
if (rs.next()) {
TitelDaten daten = new TitelDaten();
daten.TitelNr = rs.getString("titel_nr");
daten.Bezeichnung = rs.getString("bezeichnung1");
daten.Isbn = rs.getString("isbn");
daten.Deaktiviert = rs.getDate("loesch_datum");
// Basislager
String basis_lager = "";
sql = "SELECT tit_lager_basis "
+ "FROM sysadm.firm_stamm "
+ "WHERE mandant = "+config.CONFIG_MANDANT;
try {
PreparedStatement ps0 = conn.prepareStatement(sql);
ResultSet rs0 = ps0.executeQuery();
if (rs0.next()) {
basis_lager = rs0.getString("tit_lager_basis");
}
if (basis_lager.isEmpty()) {
basis_lager = "LA0001";
}
}catch (Exception e){
Log.e(TAG, "SQL: " + e.getMessage());
}
是否可以访问SQLBASE中包含特殊字符的数据?
如何在android中使用特殊字符访问SQLBASE?
您没有指定 SQLBase 的版本。假设它是最近的版本,例如 v12.3,请使用“N”前缀将国家字符集更改为 SQLBase unicode 字符集。例如将 dB 列 bezeichnung1 定义为 Nvarchar(254),而不是 varchar(254)。
此外,您还应该阅读“DBA 指南”中关于如何使用country.sql 文件的NLS 支持部分,您可以在其中设置整个代码页(例如德语)以及“SQL API 参考指南”中的部分。另请参阅同一手册中 sql.ini 文件的“字符集”语句。
特别是“SQLPCTY”,它设置国家/地区文件部分(例如,法国)。此参数告诉 SQLBase 使用country.sql 文件的指定部分中的设置。 SQLBase 支持英语作为标准语言,但它也支持许多国家语言,包括欧洲和亚洲使用的语言。因此,您必须在country.sql 文件中指定使SQLBase 能够支持另一种语言的信息。如果您调用 sqlset 并指定 SQLPCTY 参数,它将更改 sql.ini 中国家/地区关键字的设置。从以下位置下载相应的手册:SQLBase 手册