使用jdbc.gupta.sqlbase.SqlbaseDriver的特殊字符

问题描述 投票:0回答:1

我正在开发 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?

android sqlbase
1个回答
0
投票

您没有指定 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 手册

© www.soinside.com 2019 - 2024. All rights reserved.